มีคำสั่งมาตรฐานที่มักจะออกมาพร้อมกับความล้มเหลวหรือไม่?


42

ฉันต้องการทดสอบสคริปต์ด้วยคำสั่งที่ล้มเหลว ฉันสามารถใช้คำสั่งที่มีอยู่ด้วยข้อโต้แย้งที่ไม่ดี ฉันยังสามารถเขียนสคริปต์ง่าย ๆ ที่ออกโดยทันทีด้วยความล้มเหลว ทั้งสองอย่างนี้ทำได้ง่ายและทำงานให้ฉัน แต่ถ้ามีคำสั่งมาตรฐานสำหรับวัตถุประสงค์นี้ฉันต้องการใช้สิ่งนั้นแทน


falseแต่ยังไม่มีคำสั่งใด ๆ
Kusalananda

คำตอบ:


51

คุณสามารถใช้false( /bin/false, /usr/bin/falseหรือเปลือก builtin):

$ false || echo It failed.
It failed.
$

คุณยังสามารถใช้exit 1จาก subshell:

$ (exit 1) || echo Gosh, it failed too.
Gosh, it failed too.
$

นอกจากนี้คุณยังสามารถโทรออกด้วยหมายเลขใดก็ได้ในช่วง 1-255 โดยรวม (กระสุนส่วนใหญ่จะใช้การทำงานแบบโมดูโล 255 กับหมายเลขอื่นที่ให้เพื่อออกดังนั้นในทางปฏิบัติคุณสามารถไปกับหมายเลขอื่นแม้ว่าพวกมันจะถูกบังคับให้อยู่ในช่วงดังกล่าว แต่กระสุนบางตัวจะทำสิ่งอื่นเช่นออกด้วย ข้อผิดพลาดทางไวยากรณ์ (ยังคงสถานะความล้มเหลว) หากถูกเรียกด้วยค่าลบระบบ Unix-like สนับสนุนรหัสการออกภายในช่วง 0-255 เท่านั้นซึ่งเป็นสาเหตุที่คุณไม่สามารถพึ่งพาพฤติกรรมที่กำหนดไว้อย่างดีสำหรับค่าอื่น ๆ เพื่อออกจากกระสุนทั้งหมด)
mtraceur

1
และเป็นบิตของเรื่องไม่สำคัญยกเว้นว่าคุณต้องการความสะดวกในการพกพาไปยังเปลือกหอยที่เก่า / คลุมเครือจริงๆคุณสามารถทำได้! :(หรือคำสั่งอื่น ๆ !บอกว่าจะปฏิเสธสถานะการออกของคำสั่งที่ตามมา :เป็นเพียงคำสั่ง noop builtin ซึ่งมักจะออกจากความสำเร็จเสมอ (ตรวจสอบให้แน่ใจว่าได้เว้นช่องว่างหลังจาก!และก่อนที่คำสั่งจะถูกทำให้เป็นโมฆะมิฉะนั้นจะพยายามแยกคำสั่งเป็นหนึ่งคำสั่งที่ขึ้นต้นด้วย!อักขระ - หรือในกรณีของเชลล์เช่นbashในโหมดโต้ตอบมันแยกเป็นหนึ่งใน ตัวดัดแปลงประวัติพิเศษเหล่านั้น)
mtraceur
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.