首页 > 解决方案 > 重定向与管道

问题描述

cat a.txt | wcstatement和 statement有什么区别wc < cat a.txt。在这两种情况下,不是cat a.txt被定向到的输出wc吗?

标签: bashcommand-lineterminal

解决方案


绝对不。在第二种情况下(wc < cat a.txt),您正在调用命令wc a.txt,同时将一个名为的文件连接cat到进程的标准输入。

这可能看起来令人困惑,但大多数 shell 允许您将输入重定向到命令行中的任何位置。

wc a.txt < cat

将与(可以说更令人困惑)相同

wc < cat a.txt

要将命令的输出重定向到另一个命令的输入,请使用管道字符。要调用将文件作为标准输入的命令,请使用 V 形。

现在,现代 shell 将允许您键入如下命令:

wc <(cat a.txt)

这称为进程替换,与您询问的两种方法中的任何一种都不完全相同。在这种情况下,shell 将调用该进程cat a.txt并在文件描述符中“捕获”其输出。然后,shell 将调用“main”命令 (wc) 并将对该文件描述符的引用作为参数传递,就好像它是文件名一样。它使需要简单文件名的命令能够读取临时命令的输出。


推荐阅读