Bash 管道vs重定向到流程中
正在寻找一些bash专家的解释。下一个的确切区别是什么Bash 管道vs重定向到流程中,bash,Bash,正在寻找一些bash专家的解释。下一个的确切区别是什么 command1 | command2 e、 g.经典管道,其中command1的标准输出被重定向到command2的标准输入,例如 bash分叉两次 更改文件描述符 执行命令1和命令2 及 如果结果(和bash操作)相同 至少我从银行得到了同样的信息 find . -print0 | xargs -0 -n1 -I% echo =%= 及 >(命令)是否只是说|的较长方式?或者没有,我错过了一些东西?中至少讨论了部分差异 另一个区
command1 | command2
e、 g.经典管道,其中command1的标准输出被重定向到command2的标准输入,例如
- bash分叉两次
- 更改文件描述符
- 执行命令1和命令2
find . -print0 | xargs -0 -n1 -I% echo =%=
及
>(命令)
是否只是说|
的较长方式?或者没有,我错过了一些东西?中至少讨论了部分差异
另一个区别是控制哪些进程在子shell中运行:
$ declare -p f b
-bash: declare: f: not found
-bash: declare: b: not found
$ { f=foo; true; } | { b=bar; true; }
$ declare -p f b
-bash: declare: f: not found
-bash: declare: b: not found
$ { f=foo; true; } > >( { b=bar; true; })
$ declare -p f b
declare -- f="foo"
-bash: declare: b: not found
实施这些形式确实非常相似。然而,过程替代机制更为强大。例如,你可以做这样的事情:
command1 | command2
command1 > >(command 2)
diff -u <(curl 'http://www.a.example.com/') <(curl 'http://www.b.example.com/')
差异-u
command1 > >(command 2)
> >(foo)
diff -u <(curl 'http://www.a.example.com/') <(curl 'http://www.b.example.com/')