我今天学到了精彩的 shuf 命令:
ls | shuf
显示了工作目录的列表,但感谢每次我用另一个命令执行此管道命令表达式时的 shuf 。
所以我想,为什么不每秒重复这个表达,所以我尝试了
watch -n1 ls | shuf (and got no output)
watch -n1 (ls | shuf) (and got an error)
watch -n1 {ls | shuf} (and got an error)
然后我把 ls | shuf 到它自己的文件中并用它创建一个脚本 foo 。
watch -n1 ./foo (this times it worked)
是否可以将 watch 命令应用到管道命令表达式上,而无需将表达式制作成脚本文件?
答案1
watch 命令存在多种变体,其中一些变体生成 shell 来解释由传递给的参数串联而成的命令行watch
(中间有空格字符)。在那些你可以做的事情:
watch 'ls | shuf'
与...一样:
watch ls '|' shuf
(那些watch
实际运行的:"/bin/sh", ["sh", "-c", "ls | shuf"]
并且非常危险,因为第二级解释可能会在未预料到时打开错误和安全问题的大门,procps-ng 的手表可以使用该-x
选项避免这种行为)。
还有一些只执行第一个参数中给出名称的命令,并将所有参数作为参数。其中:
watch sh -c 'ls | shuf'