“|”的行为 linux中带有“>”输出重定向的管道

Kru*_*mar 6 shell pipe io-redirection

我正在执行命令

ls > a.txt | sort > b.txt

此命令正在执行以下操作:

  1. 执行 ls

  2. 排序

  3. 创建a.txt和存储排序的输出到a.txt

  4. 创建b.txt,但它是空的

谁能解释一下?

我正在实现我自己的外壳,我需要了解这种行为并模拟它。

Eri*_*ouf 15

|将左边的命令的输出,并把它交给右边的命令的输入。该>运营商将采取命令的输出,并把它放到一个文件中。这意味着,在您的示例中,当它到达时,|已经没有输出了;这一切都进入了a.txt。所以sort右边的对空字符串进行操作并将其保存到b.txt

您可能想要的是使用tee既可以写入文件又可以写入标准输出的命令

ls | tee a.txt | sort > b.txt
Run Code Online (Sandbox Code Playgroud)

虽然我真的很好奇你想要做什么,因为ls也可以/会为你整理东西。

  • 你知道 `ls` 大部分时间都会对它的输出进行排序,除非你告诉它不对吗?尝试执行 `ls -f` 而不是仅仅执行 `ls`,看看你是否得到了预期的结果 (2认同)