echo stdin เว้นแต่ว่าว่างเปล่าซึ่งในกรณีนี้ cat ไฟล์


1

ไปป์ไลน์ fstdraw in.fst | dot -Tpng | convert - -rotate 90 out.png แปลงไฟล์ในรูปแบบไบนารี่ที่แน่นอนเป็นภาพ PNG

น่าเสียดายที่ในบางกรณี fstdraw ปล่อยศูนย์ไบต์ (บั๊กในแพ็คเกจ OpenFst .) จากนั้น dot ปล่อยศูนย์ด้วยไบต์แทน PNG ด้วย convert ล้มเหลวในการสร้าง out.png. ไฟล์ที่หายไปนั้นจะแบ่งคำสั่งในภายหลัง

ที่สัญลักษณ์ไพพ์แรกจะมีวิธีแทรกสิ่งที่หมายถึง echo อินพุตของฉัน แต่ถ้าอินพุตของฉันว่างเปล่าให้เอาท์พุทไฟล์ dummy.txt แทน ดังนั้น out.png ถูกสร้างขึ้นเสมอ?

(ใคร ๆ ก็สามารถเขียนสคริปต์ แต่แน่นอนว่าบางเชลล์สร้างขึ้นในหรือ เครื่องมือมาตรฐาน ทำสิ่งนี้แล้ว)

สิ่งที่ต้องการ fstdraw in.fst | cat_maybe dummy.txt | dot ...

คำตอบ:


1

คำตอบที่ชัดเจน

แพคเกจ moreutils ให้ ifne เครื่องมือ. โดยปกติจะรันคำสั่งที่กำหนดถ้าหากอินพุตมาตรฐานเป็น ไม่ ว่างเปล่า มันมี แต่ การดำเนินการย้อนกลับ โหมด:

-n

การดำเนินการย้อนกลับ รันคำสั่งหากอินพุตมาตรฐานว่างเปล่า

โปรดทราบว่าหากอินพุตมาตรฐานไม่ว่างเปล่าก็จะถูกส่งผ่าน ifne ในกรณีนี้.

ดังนั้นทางออกคือ:

fstdraw in.fst | ifne -n cat dummy.txt | dot -Tpng | convert - -rotate 90 out.png

วิธีการทางเลือก

โพสต์นี้เดิมเป็นความคิดเห็น จุดคือการตรวจสอบเมื่อ convert ล้มเหลวและดำเนินการตาม วิธีนี้ไม่ตอบคำถามที่ชัดเจน แต่อาจแก้ปัญหาเฉพาะของคุณ ฉันโพสต์ไว้ที่นี่เพื่อการศึกษา

fstdraw in.fst | dot -Tpng | convert - -rotate 90 out.png || cp dummy.png out.png
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.