ฉันลองคำสั่งต่อไปนี้หลังจากดูวิดีโอนี้ใน shenanigans ไปป์
man -k . | dmenu -l 20 | awk '{print $1}' | xargs -r man -Tpdf | zathura -
โดยทั่วไปจะพิมพ์รายการ manpages ไปที่ dmenu เพื่อให้ผู้ใช้เลือกหนึ่งรายการจากนั้นจะใช้ xargs เพื่อเรียกใช้man -Tpdf %
(พิมพ์ไปยัง stdout PDF ของ manpage git จากอินพุต xargs) และส่ง pdf ไปยังโปรแกรมอ่าน pdf (zathura )
ปัญหาคือ (ตามที่คุณเห็นในวิดีโอ) ตัวอ่าน pdf เริ่มต้นก่อนที่ฉันจะเลือก manpage หนึ่งใน dmenu และถ้าฉันคลิก Esc และเลือกไม่มีตัวอ่าน pdf จะยังคงเปิดอยู่โดยไม่แสดงเอกสารเลย
ฉันจะทำให้โปรแกรมอ่าน pdf (และคำสั่งอื่น ๆ ในห่วงโซ่ท่อ) ทำงานเฉพาะเมื่ออินพุตของไฟล์ถึงจุดสิ้นสุดไฟล์หรือเมื่อได้รับอินพุตเลย? หรืออีกวิธีหนึ่งฉันจะทำให้ไปป์ไลน์หยุดหลังจากที่หนึ่งในคำสั่งที่ถูกล่ามโซ่ส่งกลับสถานะการออกที่ไม่ใช่ศูนย์ (ดังนั้นถ้า dmenu ส่งกลับข้อผิดพลาดสำหรับการไม่เลือกตัวเลือกคำสั่งต่อไปนี้จะไม่ทำงาน)?
pipefail
ตัวไหนเพราะตัวเลือกของ bash ที่กล่าวถึงในคำตอบของ Kusalandanda