Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 管道vs重定向到流程中_Bash - Fatal编程技术网

Bash 管道vs重定向到流程中

Bash 管道vs重定向到流程中,bash,Bash,正在寻找一些bash专家的解释。下一个的确切区别是什么 command1 | command2 e、 g.经典管道,其中command1的标准输出被重定向到command2的标准输入,例如 bash分叉两次 更改文件描述符 执行命令1和命令2 及 如果结果(和bash操作)相同 至少我从银行得到了同样的信息 find . -print0 | xargs -0 -n1 -I% echo =%= 及 >(命令)是否只是说|的较长方式?或者没有,我错过了一些东西?中至少讨论了部分差异 另一个区

正在寻找一些bash专家的解释。下一个的确切区别是什么

command1 | command2
e、 g.经典管道,其中command1的标准输出被重定向到command2的标准输入,例如

  • bash分叉两次
  • 更改文件描述符
  • 执行命令1和命令2

如果结果(和bash操作)相同

至少我从银行得到了同样的信息

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/')