สมมติว่าฉันมีท่อต่อไปนี้:
a | b | c | d
ฉันจะรอให้เสร็จสิ้นการc(หรือb) ในshหรือbash? ซึ่งหมายความว่าสคริปต์dสามารถเริ่มต้นได้ตลอดเวลา (และไม่จำเป็นต้องรอ) แต่ต้องการเอาต์พุตที่สมบูรณ์จากcการทำงานอย่างถูกต้อง
กรณีการใช้งานมีdifftoolไว้สำหรับgitเปรียบเทียบรูปภาพ มันถูกเรียกใช้โดยgitและต้องการประมวลผลอินพุต ( a | b | cส่วน) และแสดงผลลัพธ์ของการเปรียบเทียบ ( dส่วน) โทรจะลบการป้อนข้อมูลที่จำเป็นสำหรับการและa bซึ่งหมายความว่าก่อนที่จะส่งคืนจากสคริปต์กระบวนการc(หรือb) จะต้องยุติ ในทางกลับกันฉันไม่สามารถรอได้dเพราะนี่หมายความว่าฉันกำลังรอการป้อนข้อมูลจากผู้ใช้
ฉันรู้ว่าฉันสามารถเขียนผลของการcไปยังแฟ้มชั่วคราวหรืออาจจะใช้ FIFO bashใน (ไม่แน่ใจว่า FIFO จะช่วยได้หรือไม่) เป็นไปได้ไหมหากไม่มีไฟล์ชั่วคราวsh?
แก้ไข
อาจจะเพียงพอหากฉันสามารถหา ID กระบวนการของกระบวนการc(หรือb) ในแบบที่เชื่อถือได้ จากนั้นไพพ์ทั้งหมดสามารถเริ่มต้นแบบอะซิงโครนัสได้และฉันอาจรอรหัสกระบวนการ บางสิ่งบางอย่างตามแนวของ
wait $(a | b | { c & [print PID of c] ; } | d)
แก้ไข ^ 2
ฉันได้พบวิธีแก้ไขปัญหาความคิดเห็น (หรือยังดีกว่าโซลูชัน) ยินดีต้อนรับ
dสามารถเริ่มได้ฟรีทุกครั้งที่มันชอบ แต่cต้องทำให้เสร็จก่อนที่ฉันจะสามารถเดินหน้าต่อไปได้
dสามารถเริ่มได้เมื่อมันชอบคุณจะรออะไรอยู่?
dไม่ได้ใช้ผลลัพธ์ของcมันก็ดูเหมือนจะไม่เหมาะสมที่จะdเป็นส่วนหนึ่งของไปป์ไลน์ แต่ถ้าdใช้อินพุตคุณdจะต้องใช้เวลาสักครู่ในการป้อนข้อมูลหลังจากอ่านทั้งหมดเพื่อให้แนวทางของคุณสร้างความแตกต่าง
dจะเริ่มการประมวลผลcหลังจากcเสร็จสิ้นแล้วหรือไม่ คุณไม่ต้องการที่dจะเริ่มการประมวลผลแต่ละบรรทัดออกมา?