“ wait &” (“ wait ampersand”) เป็นประโยชน์ (bash) shell / shell script สำนวนหรือเทคนิค?


12

ฉัน "ได้รับมรดก" เชลล์สคริปต์บางตัวสำหรับเครื่อง Linux ที่ใช้เชลล์ "bash" ของ GNU ในกรณีเฉพาะกรณีหนึ่งเครื่องจะรัน GNU bash รุ่น 2.0.5b

หนึ่งในสคริปต์เหล่านั้นมีคำสั่งwait &("wait ampersand") ซึ่งเป็นส่วนหนึ่งของ "for line" ของforลูป ตั้งแต่แรกพบดูเหมือนว่าจะเป็นสำนวนที่น่าสนใจ / น่าสนใจ แต่เว็บของฉันค้นหาไม่ได้ส่งคืนสิ่งใดที่เกี่ยวข้อง man waitแสดง manpage "BASH_BUILTINS" ("BASH BUILTINS COMMAND") ซึ่งมีคำอธิบายดังต่อไปนี้:

wait [n]  
  Wait for the specified process and return its termination status.
  n may be a process ID or a job spec­ification;  if  a  job spec is given,
  all processes in that job's pipeline are waited for.  If n is not
  given, all currently active child processes are waited for, and the 
  return status is zero. If n speci­fies a non-existent process or job, 
  the return status is 127.  Otherwise, the return status is the exit 
  status of the last process or job waited for.

โดยการอ่านส่วนหนึ่งของ manpage นี้ดูเหมือนว่าฉันwait &จะเงียบ (ในพื้นหลัง) ทำให้แน่ใจว่า " กระบวนการลูกที่ใช้งานอยู่ในปัจจุบันทั้งหมดกำลังรอและสถานะการส่งคืนเป็นศูนย์ " ฉันถูกต้องในการตีความนี้หรือไม่? นี่เป็นสำนวนทั่วไปและ / หรือมีประโยชน์หรือไม่

สำหรับบริบทเพิ่มเติมฉันกำลังพูดถึงการใช้งานประเภทต่อไปนี้ในสคริปต์:

for file in `ls *.txt ; wait &`
do
   ...
   [cp instructions]
   ...
   [mv instructions]
   ...
   [mailx instruction]
done

คำตอบ:


14

ฉันไม่สามารถจินตนาการได้ว่าจะเขียนรหัสนี้ด้วยเหตุผลใดและฉันก็ค่อนข้างแน่ใจว่าบุคคลที่เขียนรหัสนี้พยายามที่จะบรรลุ waitที่นี่ไม่ทำอะไรเลย - จากมุมมองของมันมีอยู่ไม่มีกระบวนการที่เด็กดังนั้นมันก็จะออกทันทีและพื้นทำหน้าที่เป็น noop ( waitตัวเองดำเนินการในกระบวนการเด็กเนื่องจากการแทนคำสั่ง แต่ที่ไม่เกี่ยวข้อง)

เช่นกันการแยกวิเคราะห์การส่งออกของ LS คือค่อนข้างเปราะบาง ให้ลองทำสิ่งนี้แทน:

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