根据旧习惯,我总是“从左到右”重定向,例如。
cat file | bar
foo | bar
我注意到你可以“从右到左”重定向。但是,是否可以对第二种形式执行此操作(例如从一个程序到另一个程序)?
bar < file
bar ??? foo
另外,我很好奇何时使用“从左”与“从左”是否有任何约定。 “从右开始”,或者如果这只是偏好问题或最简短或最优雅的内容。
答案1
IIUC,你可以使用 Bash流程替代模拟第二种形式的功能:
$ echo foobar | grep bar
foobar
$ grep bar <(echo foobar)
foobar
请注意,要使此功能正常工作,使用的命令必须能够接受文件作为参数 -grep
是吗?
答案2
一般来说,您可以将管道之间的命令|
视为在子 shell 中运行。
所以
foo | bar
可以被认为是
(foo) | (bar)
因此,这可能有助于理解重定向如何适应事物。
foo < bar | baz
相当于
(foo < bar) | (baz)
即,输入将foo
是文件bar
,其输出将是输入baz
。
进程替换遵循相同的重定向规则:
foo <(echo bar) | baz
相当于
( foo <(echo bar) ) | (baz)