สมมติว่าฉันมีท่อต่อไปนี้:
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
จะเริ่มการประมวลผลแต่ละบรรทัดออกมา?