watchコマンドでコマンド出力を引数として使用する

watchコマンドでコマンド出力を引数として使用する

私には時計があります

jq -r '.' $(ls -t | head -1)"

目標は、ディレクトリ内の最後に変更されたファイルに "jq -r '.'"を適用することです。残念ながら、ファイルが最後に変更された時期を確認するために使用されるコマンドは、リフレッシュ時ではなく監視が開始されたときに評価されます。更新するたびに、すべてのコマンドが再評価されるようにどのように書く必要がありますか?

ありがとう

ベストアンサー1

単一引用符でコマンドを渡すと、watchコマンドが実行されるのではなく、監視サイクルごとに拡張されます。たとえば、次のようになります。

watch echo $(date)

watch 'echo $(date)'

最初のコマンドは元の日付を印刷し続け、2番目のコマンドは1サイクルごとに実行され、date別の日付を印刷します。

これは、リテラル文字列をecho $(date)watchコマンドに渡してサイクルごとに実行し、正しい日付を表示するためです。引用符を使用しないと、シェルは$(date)それを拡張してdateコマンドの出力に置き換えてに渡すため、watch同じ出力を繰り返し印刷します。

おすすめ記事