Unix Script: Đợi cho đến khi một tập tin tồn tại


11

Tôi cần một tập lệnh sẽ đợi một (examplefile.txt) xuất hiện trong thư mục / tmp

và một khi nó được tìm thấy để dừng chương trình, nếu không thì ngủ tệp cho đến khi nó nằm

Cho đến nay tôi có:

nếu [ ! -f /tmp/examplefile.txt]

sau đó

Câu trả lời:


16

Hàm bash này sẽ chặn cho đến khi tệp đã cho xuất hiện hoặc đạt đến thời gian chờ đã cho. Trạng thái thoát sẽ là 0 nếu tệp tồn tại; nếu không, trạng thái thoát sẽ phản ánh số giây mà hàm đã chờ.

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

Và đây là cách bạn có thể sử dụng nó:

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

Một vi dụ khac:

# 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

Cứ sau 5 giây nó sẽ thức dậy và tìm kiếm tập tin. Khi tệp xuất hiện, nó sẽ thoát khỏi vòng lặp, cho bạn biết nó đã tìm thấy tệp và thoát (không bắt buộc, nhưng gọn gàng.)

Đặt nó vào một kịch bản và bắt đầu nó như một kịch bản &

Điều đó sẽ chạy nó trong nền.

Có thể có sự khác biệt tinh tế trong cú pháp tùy thuộc vào shell bạn sử dụng. Nhưng đó là ý chính của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.