web-dev-qa-db-ja.com

パイプを使用して式に対してwatchコマンドを実行するにはどうすればよいですか?

私は今日素晴らしい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)

式をスクリプトファイルにせずに、監視コマンドをパイプコマンド式に適用することはできますか?

7
Abdul Al Hazred

ウォッチコマンドにはいくつかのバリエーションがあり、watchに渡された引数の連結で作成されたコマンドラインを解釈するためにシェルを生成するものもあります(間にスペース文字があります)。あなたができるものでは:

watch 'ls | shuf'

と同じ:

watch ls '|' shuf

(これらのwatchは実際に実行されます:"/bin/sh", ["sh", "-c", "ls | shuf"]そして、2番目のレベルの解釈が予期しないときにバグやセキュリティ問題への扉を開く可能性があるという点で非常に危険です。procps-ngのウォッチは、 -xオプション)。

そして、すべての引数を引数として、最初の引数に名前が指定されているコマンドを実行するだけのものもあります。それらの中で:

watch sh -c 'ls | shuf'
8