Câu trả lời:
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."
}
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ó.