如何使用带有管道命令/程序链的 watch 命令

Tul*_*ova 113 bash pipe watch

我通常使用watchLinux 实用程序每隔n几秒重复观察一个命令的输出,例如在watch df -h /some_volume/.

但是我似乎无法使用watch管道命令系列,例如:

$ watch ls -ltr|tail -n 1
Run Code Online (Sandbox Code Playgroud)

如果我这样做,watch真的ls -ltr是在观察并且输出被传递给tail -n 1不输出任何东西。

如果我试试这个:

$ watch (ls -ltr|tail -n 1)
Run Code Online (Sandbox Code Playgroud)

我得到

$ watch: syntax error near unexpected token `ls'
Run Code Online (Sandbox Code Playgroud)

并且以下任何一种原因都失败了:

$ watch <(ls -ltr|tail -n 1)

$ watch < <(ls -ltr|tail -n 1)

$ watch $(ls -ltr|tail -n 1)

$ watch `ls -ltr|tail -n 1)`
Run Code Online (Sandbox Code Playgroud)

最后,如果这样做:

$ watch echo $(ls -ltr|tail -n 1)
Run Code Online (Sandbox Code Playgroud)

我在给定的时间间隔内看到输出没有变化,因为里面的命令$()只运行一次,并且结果输出字符串总是作为文字打印(“观察”)。

那么,我如何使watch命令与管道命令链一起工作 [其他将它们放在脚本中]?

Dop*_*oti 199

watch 'command | othertool | yet-another-tool'
Run Code Online (Sandbox Code Playgroud)

  • 可能值得注意的是通用方法以及`watch sh -c 'command | 等''特别关注问题中尝试的方法。 (2认同)

小智 14

watch -n 1 "ls -lrt | tail -n20; date"
Run Code Online (Sandbox Code Playgroud)

让我们连续排管并运行。

  • @NamGVU:每 1 秒运行一次命令 (4认同)

小智 8

'使用单引号 ( ) 和双引号 ( )的组合"。例如:

watch -n 1 "links -dump 127.0.0.1/server-status | grep -e '\S' -Fe 'www.'"
Run Code Online (Sandbox Code Playgroud)