将多个命令的输出重定向为另一个命令的输入的正确方法是什么?
例如
$ command < (command2 | grep pattern)
答案1
(如有疑问,这里指的是 bash)
通过创建(或扩展现有)管道,可以将一个命令或一个管道的输出作为另一命令的输入:
command1 | command2
command1 | command2 | command3
多个命令(包括管道)可以与子 shell 或列表(组命令)组合。该组合成为管道的第一部分:
(command1; command2 | command3; command4) | command5
{command1; command2 | command3; command4;} | command5 # note the ; before }
另一种可能性是“此处字符串”(甚至是“此处文档”):
command2 <<< $(command1)
command2 <<EOT
First input line
$(command1)
Last input line
EOT
其他案例
命令替换当输出应是命令行的一部分时使用,即如果一个命令应将另一个命令的输出视为其自己的参数:
echo $(date)
echo 将 的输出视为date
其参数;就好像它是在命令行中输入的一样。
工艺替代使另一个进程的输出显示为在命令行上作为参数给出的(不可查找的)文件的内容。
grep bar <(echo $'foo\nbar\nbaz')
看起来像 grep 一样
echo $'foo\nbar\nbaz' > /path/to/file
grep bar /path/to/file
答案2
您必须使用以下命令执行命令命令替换句法。
$ command < $(command2 | grep pattern)