重定向与管道

时间:2019-08-31 03:41:11

标签: bash command-line terminal

语句cat a.txt | wc和语句wc < cat a.txt有什么区别。在这两种情况下,都不会将cat a.txt的输出定向到wc吗?

1 个答案:

答案 0 :(得分:1)

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

这似乎令人困惑,但是大多数shell允许您将输入重定向到命令行中的任何位置。

wc a.txt < cat

将与(可能更加混乱)

相同
wc < cat a.txt

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

现在,现代的shell可以让您键入如下命令:

wc <(cat a.txt)

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