パイプを使用して式を表示するには?

パイプを使用して式を表示するには?

私は今日素晴らしいshufコマンドを学びました。

ls | shuf  

作業ディレクトリの一覧が表示されますが、他のコマンドでこのパイプラインコマンド式を実行するたびにshufのおかげで可能です。

だからこの表現を1秒ごとに繰り返すとどうかという考えが入って試してみました。

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コマンドにはいくつかのバリエーションがあり、その中には渡された引数watch(中間スペース文字を含む)からリンクされたコマンドラインを解釈するシェルを作成します。できることは次のとおりです。

watch 'ls | shuf'

それは次のとおりです。

watch ls '|' shuf

watch(実際に実行されるもの:"/bin/sh", ["sh", "-c", "ls | shuf"]2番目のレベルの解釈が予期しないバグやセキュリティの問題の文を開く可能性があるため、非常に危険です。procps-ngの監視は-xこのオプションを使用してこの動作を回避できます)。

最初の引数で指定された名前でのみコマンドを実行し、すべての引数を引数として使用することもあります。中:

watch sh -c 'ls | shuf'

おすすめ記事