为什么在将 fortune 的输出输送到 cowsay 时 watch 不起作用

why doesn't watch work when piping the output of fortune into cowsay

cowsay 是一个愚蠢的 linux 工具,用于在终端中显示母牛说给定文本。

$ cowsay hello

fortune 也很愚蠢 linux 在终端中显示 "random" 报价。

$ fortune

这两个命令都可以在终端中使用手表重复运行,例如

$ watch cowsay hello
$ watch fortune

此外,这两个命令可以结合使用,因此牛说 "random" 引号。通过将 fortune 的输出输送到 cowsay。

$ fortune | cowsay

然而,watch 的使用和将 fortune 的输出通过管道输送到 cowsay 的组合不会做任何事情......即挂起,直到过程结束

$ watch fortune | cowsay

有人知道为什么吗?

这是因为 | 之后的所有内容都是在子 shell 中执行的。试试这个:

$ watch "fortune | cowsay"

使用 watch fortune | cowsay,您将 watch fortune 的输出输送到 cowsay。你想 watch fortune 的值通过管道传输到 cowsay 所以你应该引用它所以 watch 会让整个命令执行为

watch 'fortune | cowsay'