bash正向流程替换背后发生了什么?
根据维基百科,“进程替换也可用于捕获通常会转到文件的输出,并将其重定向到进程的输入.”(
http://en.wikipedia.org/wiki/Process_substitution).
所以,用我自己的话来说,这意味着通过进程替换,我可以获取命令A的输出并将其用作命令B的输入.换句话说,它就像一个管道(这是正确的吗?). 所以,如果这是真的,如果我这样做: echo "test" >(wc) 那么我应该期望获得以下内容: 1 1 5 因为我对上述命令的理解类似于以下内容: $echo "test" > tmp $wc tmp 1 1 5 tmp 除了我没有使用进程替换的tmp文件. 但我得到以下输出: test /dev/fd/63 这显然表明我的心理模型不正确.我哪里错了? 我理解<(命令).例如 $diff <(head file1) <(head file2) 完全有道理.但不是>(命令). 解决方法
从
Process Substitution 起
echo“test”>(wc)会发生什么? 打开文件/ dev / fd / 63以将echo测试与wc连接. wc启动时输入连接到/ dev / fd / 63.然后将该文件的名称(/ dev / fd / 63)作为参数传递给当前命令(echo“test”),从而产生echo“test”/ dev / fd / 63.这就是你看到的原因 test /dev/fd/63 作为输出. wc等待输入,但由于echo不写入/ dev / fd / 63,因此计数将为0. 如果你想让它工作,你必须创建一个脚本,它接受最后一个参数并将最后的N-1个参数回显到最后一个 #! /bin/bash echo "${@:1:$(($# - 1))}" >${@: -1} 当你打电话给这个 bash script.sh test >(wc) 你会看到预期的输出 1 1 5 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |