私は bash の構文と bash 自体が苦手です。基本的に、プロセスが出力を作成している間に、特定の内容の特定の行が印刷されているかどうかをリアルタイムで確認し、何かをしたいのです。
processName | while read myLine; if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done
これを行うことができるはずです:
processname | sed -n -e "/^Loading X Module$/p" | sed "s/^.*$/OMG/"
変数を引用してください:
if [ "$myLine" -eq "Loading X module" ];
これを交換する必要があります
if [ $myLine -eq "Loading X module" ];
with if [ "$myLine" == "Xモジュールをロード中" ];
演算子は-eq
整数比較用です。$myLine
テスト式が機能しない原因となるスペースが含まれているため、引用する必要があります。
構文は問題ないように見えますが、出力のバッファリングで問題が発生する可能性があります。
processName
端末で実行されると考えてください。これは、次のプログラムを使用して実現できますunbuffer
。
unbuffer processName | while read myLine; if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done
ああ、あなたの問題が「bash: 予期しないトークン `done' に近い構文エラー」である場合は、実行してください!
while read myLine; do if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done
表示されるエラー メッセージを投稿すると、より関連性の高い回答が得られます。