次の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 Test
Slackチャンネルに「test」という言葉が投稿されています。
ベストアンサー1
問題は、message.sh
コマンドが起動しないことです。シェルは$(...)
結果を引数として渡すために最初にコマンドを評価する必要がありますが、使用中の操作はtailf
無限です。これを以下と比較してみてください。
ls $(echo hello;sleep 10) & sleep 1; ps
まだ起動していないps
ことを示し、完了して部分的に完了した場合にのみ引数を取得します。ls
hello
sleep 10
$()