出力にエラーを示す特定の文字列がある場合は、コマンドを繰り返したいと思います。私がしたいコマンドはで繰り返すことですgksu ./installer.run > ./inst.log 2>&1
。 Bashコマンドラインでこれをどのように実行しますか?'string'
./inst.log
答え1
ファイル内の文字列を探します。
grep -q string file
終了値は、grepが何かを見つけたかどうかを示します。
その後、コマンドが実際の終了値を返す限り繰り返すことができます。
while command ; do
repeat this
done
コマンドを複数回実行したい場合でも
while true ; do
some command
if ! grep -q string file ; then
break # jump out of the loop if it's _not_ there
fi
done
それ以外の場合は、ループの前と内部でコマンドを繰り返す必要があります。
答え2
ではという点に注意してくださいwhile while-cmd-list; do do-cmd-list; done
。while-cmd-list
返品コマンドのリスト。単一のコマンドである必要はありません。
だからあなたはこれを行うことができます:
while
gksu ./installer.run > ./inst.log 2>&1
grep -q string inst.log
do
echo >&2 "Trying again, output contained string"
done
ここでも次のことができます。
while
gksu ./installer.run 2>&1 |
tee ./inst.log |
grep string > /dev/null
do
echo >&2 "Trying again, output contained string"
done
-q
(これにより、grep
早期シャットダウンが発生し、インストーラがSIGPIPEを受信する可能性があるため、これを使用しませんでした。)