1

私は bash の構文と bash 自体が苦手です。基本的に、プロセスが出力を作成している間に、特定の内容の特定の行が印刷されているかどうかをリアルタイムで確認し、何かをしたいのです。

    processName | while read myLine; if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done
4

5 に答える 5

0

これを行うことができるはずです:

processname | sed -n -e "/^Loading X Module$/p" | sed "s/^.*$/OMG/"
于 2013-11-29T17:15:17.890 に答える
0

変数を引用してください:

if [ "$myLine" -eq "Loading X module" ];
于 2012-10-12T17:26:35.637 に答える
0

これを交換する必要があります

if [ $myLine -eq "Loading X module" ];

with if [ "$myLine" == "Xモジュールをロード中" ];

演算子は-eq整数比較用です。$myLineテスト式が機能しない原因となるスペースが含まれているため、引用する必要があります。

于 2012-10-15T16:25:58.053 に答える
0

構文は問題ないように見えますが、出力のバッファリングで問題が発生する可能性があります。

processName端末で実行されると考えてください。これは、次のプログラムを使用して実現できますunbuffer

unbuffer processName | while read myLine; if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done
于 2012-10-12T10:07:26.507 に答える
0

ああ、あなたの問題が「bash: 予期しないトークン `done' に近い構文エラー」である場合は、実行してください!

while read myLine; do if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done

表示されるエラー メッセージを投稿すると、より関連性の高い回答が得られます。

于 2013-12-03T13:40:09.430 に答える