Shell-Script

如何使用管道對錶達式執行 watch 命令?

  • March 29, 2015

今天學到了絕妙的 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 命令應用於管道命令表達式而無需將表達式製成腳本文件?

watch 命令有幾種變體,其中一些會生成一個 shell 來解釋由傳遞給的參數的串聯構成的命令行watch(中間有空格字元)。在那些你可以做的事情中:

watch 'ls | shuf'

如同:

watch ls '|' shuf

(那些watch實際執行:"/bin/sh", ["sh", "-c", "ls | shuf"]並且非常危險,因為第二級解釋可能會在未預料到的情況下打開錯誤和安全問題的大門,procps-ng 的手錶可以通過該-x選項避免這種行為)。

還有一些只執行命令,其名稱在第一個參數中給出,所有參數作為參數。在那些:

watch sh -c 'ls | shuf'

引用自:https://unix.stackexchange.com/questions/193270