tailf出力をスクリプト引数として使用する

tailf出力をスクリプト引数として使用する

次のtailfを実行すると、なぜこれが起こりますか?

tailf /var/log/z-way-server.log | grep --line-buffered device-info | gawk 'BEGIN { FS = "\"" } ; {print $4,"is",$8}'

希望の出力を取得します。

Den Window Sensor is off

ただし、スクリプトにパラメータとして渡す場合(スクリプトで$ 1を使用):

./message.sh $(tailf /var/log/z-way-server.log | grep --line-buffered device-info | gawk 'BEGIN { FS = "\"" } ; {print $4,"is",$8}')

期待どおりにメッセージを転送しませんか?明確な説明のために、message.sh TestSlackチャンネルに「test」という言葉が投稿されています。

ベストアンサー1

問題は、message.shコマンドが起動しないことです。シェルは$(...)結果を引数として渡すために最初にコマンドを評価する必要がありますが、使用中の操作はtailf無限です。これを以下と比較してみてください。

ls $(echo hello;sleep 10) & sleep 1; ps

まだ起動していないpsことを示し、完了して部分的に完了した場合にのみ引数を取得します。lshellosleep 10$()

おすすめ記事