Unixスクリプト:ファイルが存在するまで待機します


11

(examplefile.txt)が/ tmpディレクトリに表示されるのを待つスクリプトが必要です

そして、それがプログラムを停止することが見つかると、そうでなければ、それが見つかるまでファイルをスリープさせる

これまでのところ:

もし[!-f /tmp/examplefile.txt]

その後

回答:


16

このbash関数は、指定されたファイルが表示されるか、指定されたタイムアウトに達するまでブロックします。ファイルが存在する場合、終了ステータスは0になります。そうでない場合、終了ステータスは、関数が待機した秒数を反映します。

wait_file() {
  local file="$1"; shift
  local wait_seconds="${1:-10}"; shift # 10 seconds as default timeout

  until test $((wait_seconds--)) -eq 0 -o -f "$file" ; do sleep 1; done

  ((++wait_seconds))
}

そして、それを使用する方法は次のとおりです。

# Wait at most 5 seconds for the server.log file to appear

server_log=/var/log/jboss/server.log

wait_file "$server_log" 5 || {
  echo "JBoss log file missing after waiting for $? seconds: '$server_log'"
  exit 1
}

もう一つの例:

# Use the default timeout of 10 seconds:
wait_file "/tmp/examplefile.txt" && {
  echo "File found."
}

12
until [ -f /tmp/examplefile.txt ]
do
     sleep 5
done
echo "File found"
exit

5秒ごとに起動し、ファイルを探します。ファイルが表示されると、ループから抜け出し、ファイルを見つけて終了したことを通知します(必須ではありませんが整頓されています)。

それをスクリプトに入れて、スクリプトとして開始します&

それはバックグラウンドで実行されます。

使用するシェルによっては、構文に微妙な違いがある場合があります。しかし、それはそれの要点です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.