为什么 cat date.txt 没有显示任何输出

为什么 cat date.txt 没有显示任何输出
syed@Emad-World:~$ date | cut --delimiter=" " --fields=1 > date.txt | cat date.txt
syed@Emad-World:~$ 

答案1

Shell 的管道 ( |) 结构用于将一个进程的标准输出连接到另一个进程的标准输入。

在您的例子中,您将cut命令的标准输出重定向到文件 ( > date.txt),而根本不读取标准输入(因为您将文件名参数 传递date.txtcat命令)。在这种情况下,适当的 shell 连词是:

  • &&其中cat date.txt将有条件地执行,取决于管道中先前命令的成功退出状态

或者

  • ;在这种情况下cat date.txt将无条件执行

在这种情况下,可能更合适(例如,如果我们无法写入,&&我们就不会尝试读取)。所以date.txt

date | cut --delimiter=" " --fields=1 > date.txt && cat date.txt

除非您只是在使用管道,否则您可以cut通过date直接输出缩写的星期名称来避免这种情况:

date +%a > date.txt && cat date.txt

您可能想知道为什么date | cut --delimiter=" " --fields=1 > date.txt | cat date.txt不管用——因为它在语法上是正确的。原因是您不能依赖管道的 LHS 和 RHS 的执行顺序——因此cat date.txt很可能在 date 命令的输出写入之前执行。

答案2

当您不传输任何内容时,这是预期的行为。

$ date | cut --delimiter=" " --fields=1 > date.txt | cat date.txt
$

Date 返回一个字符串,您可以将其拆分,然后将一个单词写入新文件。创建新文件不会在 STDOUT 上输出,因此不会有任何内容通过管道传输到 cat。

相关内容