これを行うにはたくさんの方法があります。最初に頭に浮かんだのは次のとおりです。
OUTPUT="";
while [ `echo $OUTPUT | grep -c somestring` = 0 ]; do
OUTPUT=`$cmd`;
done
ここで、$cmdは実行するコマンドです。
これがBASH関数バージョンであるため、インタラクティブシェルから定期的に呼び出したい場合は、これをより簡単に呼び出すことができます。
function run_until () {
OUTPUT="";
while [ `echo $OUTPUT | grep -c $2` = 0 ]; do
OUTPUT=`$1`;
echo $OUTPUT;
done
}
免責事項:コマンドに多くの引数がある場合、または文字列に特殊文字が含まれている場合は、テストが簡単です。追加のエスケープなどを行う必要がある場合があります。
編集:Adamのコメントからのフィードバックに基づいています-何らかの理由で出力が必要ない場合(つまり、出力を表示したくない場合)、バックティックの使用量が少なく、したがってオーバーヘッドが少ない、この短いバージョンを使用できます:
OUTPUT=0;
while [ "$OUTPUT" = 0 ]; do
OUTPUT=`$cmd | grep -c somestring`;
done
BASH関数バージョンも:
function run_until () {
OUTPUT=0;
while [ "$OUTPUT" = 0 ]; do
OUTPUT=`$1 | grep -c $2`;
done
}