สคริปต์ Unix: รอจนกว่าไฟล์จะมีอยู่


13

ฉันต้องการสคริปต์ที่จะรอให้ (examplefile.txt) ปรากฏในไดเรกทอรี / tmp

และเมื่อพบว่าหยุดโปรแกรมไม่เช่นนั้นให้พักไฟล์จนกว่าจะพบตำแหน่ง

จนถึงตอนนี้ฉันมี:

ถ้า [! -f /tmp/examplefile.txt]

แล้วก็

คำตอบ:


17

ฟังก์ชั่นทุบตีนี้จะบล็อกจนกว่าไฟล์ที่กำหนดจะปรากฏขึ้นหรือถึงระยะหมดเวลาที่กำหนด สถานะการออกจะเป็น 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."
}

วิธีที่แม่นยำยิ่งขึ้นในการคำนวณการหมดเวลาอาจเป็น:start=`date +%s`; while (( `date +%s` - start > 10 )); do sleep 1; done
x-yuri

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

ทุก 5 วินาทีมันจะตื่นขึ้นมาและมองหาไฟล์ เมื่อไฟล์ปรากฏขึ้นก็จะเลื่อนออกจากลูปบอกคุณพบว่าไฟล์และออก (ไม่จำเป็น แต่เป็นระเบียบเรียบร้อย)

ใส่ลงในสคริปต์และเริ่มเป็นสคริปต์ &

ที่จะทำงานในพื้นหลัง

อาจมีความแตกต่างเล็กน้อยในไวยากรณ์ขึ้นอยู่กับเชลล์ที่คุณใช้ แต่นั่นคือส่วนสำคัญของมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.