ファイルに特定の文字列があるときにコマンドを繰り返すには?

ファイルに特定の文字列があるときにコマンドを繰り返すには?

出力にエラーを示す特定の文字列がある場合は、コマンドを繰り返したいと思います。私がしたいコマンドはで繰り返すことです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; donewhile-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を受信する可能性があるため、これを使用しませんでした。)

関連情報