我通常使用watch
Linux 实用程序每秒重复查看命令的输出n
,例如watch df -h /some_volume/
.
但我似乎无法使用watch
一系列管道命令,例如:
$ watch ls -ltr|tail -n 1
如果我这样做,watch
就会真正地观察ls -ltr
并且输出被传递到tail -n 1
不输出任何内容的地方。
如果我尝试这个:
$ watch (ls -ltr|tail -n 1)
我明白了
$ watch: syntax error near unexpected token `ls'
并且以下任何一项因某种原因失败:
$ watch <(ls -ltr|tail -n 1)
$ watch < <(ls -ltr|tail -n 1)
$ watch $(ls -ltr|tail -n 1)
$ watch `ls -ltr|tail -n 1)`
最后如果这样做:
$ watch echo $(ls -ltr|tail -n 1)
我在给定的时间间隔内看到输出没有变化,因为内部命令$()
仅运行一次,并且生成的输出字符串始终作为文字打印(“监视”)。
那么,如何使该watch
命令与管道命令链一起使用[其他将它们放入脚本中]?
答案1
watch 'command | othertool | yet-another-tool'
答案2
watch -n 1 "ls -lrt | tail -n20; date"
让你连续管道和运行。
答案3
'
使用单引号 ( ) 和双引号 ( )的组合"
。例如:
watch -n 1 "links -dump 127.0.0.1/server-status | grep -e '\S' -Fe 'www.'"
答案4
假设您运行一个命令然后想要观看它;使用:
ls -lrt | tail -n20; date
watch "!!"