ฉันต้องการสคริปต์ที่จะรอให้ (examplefile.txt) ปรากฏในไดเรกทอรี / tmp
และเมื่อพบว่าหยุดโปรแกรมไม่เช่นนั้นให้พักไฟล์จนกว่าจะพบตำแหน่ง
จนถึงตอนนี้ฉันมี:
ถ้า [! -f /tmp/examplefile.txt]
แล้วก็
ฉันต้องการสคริปต์ที่จะรอให้ (examplefile.txt) ปรากฏในไดเรกทอรี / tmp
และเมื่อพบว่าหยุดโปรแกรมไม่เช่นนั้นให้พักไฟล์จนกว่าจะพบตำแหน่ง
จนถึงตอนนี้ฉันมี:
ถ้า [! -f /tmp/examplefile.txt]
แล้วก็
คำตอบ:
ฟังก์ชั่นทุบตีนี้จะบล็อกจนกว่าไฟล์ที่กำหนดจะปรากฏขึ้นหรือถึงระยะหมดเวลาที่กำหนด สถานะการออกจะเป็น 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."
}
until [ -f /tmp/examplefile.txt ]
do
sleep 5
done
echo "File found"
exit
ทุก 5 วินาทีมันจะตื่นขึ้นมาและมองหาไฟล์ เมื่อไฟล์ปรากฏขึ้นก็จะเลื่อนออกจากลูปบอกคุณพบว่าไฟล์และออก (ไม่จำเป็น แต่เป็นระเบียบเรียบร้อย)
ใส่ลงในสคริปต์และเริ่มเป็นสคริปต์ &
ที่จะทำงานในพื้นหลัง
อาจมีความแตกต่างเล็กน้อยในไวยากรณ์ขึ้นอยู่กับเชลล์ที่คุณใช้ แต่นั่นคือส่วนสำคัญของมัน
start=`date +%s`; while (( `date +%s` - start > 10 )); do sleep 1; done