การใช้ขนานเพื่อรันสคริปต์โดยไม่มีอินพุต


10

ฉันพยายามเรียกใช้สคริปต์ด้วย GNU ขนานกันหลายครั้ง แต่สคริปต์ไม่มีข้อโต้แย้ง

หากฉันเพียงแค่รัน 'parallel foo.sh' ฉันจะได้รับสิ่งนี้:

parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.

คำตอบ:


10

สมมติว่าคุณต้องการเรียกใช้สิบครั้งไวยากรณ์นี้จะทำงาน:

parallel -n0 foo.sh ::: {1..10}

parallelต้องการลำดับการป้อนข้อมูลของความยาวบางส่วน ( ::: {1..10}) และคุณจำเป็นต้องละเว้นเนื้อหาของลำดับการป้อนข้อมูล ( -n0) คุณสนใจเฉพาะความยาวของมัน

คำสั่งดั้งเดิมของคุณ: parallel foo.sh, ไม่มีลำดับการป้อนข้อมูลเพื่อระบุว่าคุณต้องการความขนาน คำเตือนที่คลุมเครือกำลังบอกคุณว่าparallelกำลังจะเริ่มฟังเทอร์มินัลสำหรับลำดับการป้อนข้อมูลและนี่อาจไม่ใช่สิ่งที่คุณต้องการ

นี่คือตัวอย่างการสอน:

seq 10 | parallel -n0 my_command my_args

มันทำงานอย่างไร:

  • parallelใช้ลำดับการป้อนข้อมูลจากที่อื่นเสมอ มันสามารถเป็นลำดับที่คั่นด้วยช่องว่างแบบอินไลน์นำหน้าด้วย:::หรือลำดับที่คั่นด้วย newline จากไฟล์หรือแหล่งที่มาของไฟล์เช่นไปป์ ในตัวอย่างนี้ลำดับอินพุตมาจากไพพ์
  • seq 10 สร้างลำดับของตัวเลขที่คั่นด้วย newline จากหนึ่งถึงสิบ
  • -n0ตัวเลือกบอกขนานที่จะไม่สนใจค่าในลำดับการป้อนข้อมูล สิ่งที่เราใส่ใจคือความยาวของลำดับไม่ใช่เนื้อหา แม้ว่าตัวเลขที่ไม่ได้ใช้คำสั่งจะยังคงดำเนินการสิบครั้ง

ตัวอย่างอื่น:

parallel -n0 echo -n 'x' ::: {1..5}

มันทำงานอย่างไร:

  • ลำดับการป้อนข้อมูลเป็นแบบอินไลน์
  • {1..5} สร้างลำดับของตัวเลขคั่นด้วยช่องว่างจากหนึ่งถึงห้า
  • -n0ละเว้นค่าลำดับ (และเราสะท้อนสตริง'x'แต่ละครั้งแทน)
  • เอาท์พุท: xxxxx

เปรียบเทียบกับ:

parallel echo -n ::: {1..5}

มันทำงานอย่างไร:

  • ลำดับการป้อนข้อมูลเป็นแบบอินไลน์
  • {1..5} สร้างลำดับของตัวเลขคั่นด้วยช่องว่างจากหนึ่งถึงห้า
  • echoค่าจากลำดับการป้อนข้อมูลแต่ละครั้งจะถูกนำมาใช้เป็นข้อโต้แย้งไปยัง ไม่รับประกันการสั่งซื้อ
  • ผลลัพธ์: 43215. อาจเป็นคำสั่งใด ๆ

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