三通和输出重定向

Min*_*t.K 3 command-line

ls -l *.txt | wc -l | tee count.txt
ls -l *.txt | wc -l > tee count.txt
Run Code Online (Sandbox Code Playgroud)

我正在学习基本的 Unix 命令。我认为提到的这两个命令会做同样的事情,但他们没有。只有第一个命令写入 count.txt。为什么第二个命令中使用的输出重定向没有做任何事情?

Rah*_*hul 5

ls -l *.txt | wc -l | tee count.txt
Run Code Online (Sandbox Code Playgroud)

在第一个例子中:

ls命令列出当前目录中所有文件扩展名为 的.txt文件,每行一个文件;此输出通过管道传输到wc,它计算行数并输出数字;此输出通过管道传送到tee,它将输出写入终端,并将相同的信息写入文件count.txt。如果count.txt已经存在,则将其覆盖。

在你的第二个例子中:

ls -l *.txt | wc -l > tee count.txt
Run Code Online (Sandbox Code Playgroud)

在此示例中,tee将被视为文件名而不是命令,并且 的输出wc -l将被重定向到新创建的文件tee,并将包含wc -l和字符串的输出count.txt

如果您想要与第一个示例相同的行为,那么正确的做法是:

 ls -l *.txt | wc -l > count.txt
Run Code Online (Sandbox Code Playgroud)

>本身足以将输出重定向到count.txt文件

  • @Mint.K 你的第二个例子是一个完全不同的命令。它的意思是“将 `wc -l` 的输出保存在一个名为 `tee` 的文件中”,并且不以任何方式涉及 `tee` 命令。 (3认同)