Script Unix: Tunggu hingga ada file

11

Saya membutuhkan skrip yang akan menunggu (examplefile.txt) muncul di direktori / tmp

dan setelah itu ditemukan untuk menghentikan program, jika tidak tidur file sampai itu ditemukan

Sejauh ini saya punya:

jika [! -f /tmp/examplefile.txt]

kemudian

Cidricc
sumber

Jawaban:

16

Fungsi bash ini akan memblokir sampai file yang diberikan muncul atau batas waktu yang diberikan tercapai. Status keluar akan menjadi 0 jika file ada; jika tidak, status keluar akan mencerminkan berapa detik fungsi telah menunggu.

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))
}

Dan inilah cara Anda dapat menggunakannya:

# 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
}

Contoh lain:

# Use the default timeout of 10 seconds:
wait_file "/tmp/examplefile.txt" && {
  echo "File found."
}
Elifarley
sumber
12
until [ -f /tmp/examplefile.txt ]
do
     sleep 5
done
echo "File found"
exit

Setiap 5 detik itu akan bangun dan mencari file. Ketika file muncul, itu akan keluar dari loop, memberi tahu Anda bahwa itu menemukan file dan keluar (tidak diperlukan, tetapi rapi.)

Masukkan itu ke dalam skrip dan mulai sebagai skrip &

Itu akan menjalankannya di latar belakang.

Mungkin ada perbedaan halus dalam sintaks tergantung pada shell yang Anda gunakan. Tapi itulah intinya.

Jeff Dodd
sumber