Bash ถ้าคำสั่งไม่เสร็จในเวลา X


13

ฉันพยายามเรียกใช้บางอย่างเช่น:

sudo dhclient $wifi || otherFunction

ปัญหาคือเมื่อdhclientล้มเหลวมันแค่แฮงค์แทนที่จะทิ้งข้อผิดพลาด

ฉันจะเขียนใหม่ข้างต้นเพื่อให้dhclientถูกฆ่าและotherFunctionได้รับการเรียกถ้าdhclientไม่เสร็จใน 60 วินาที?

คำตอบ:


13

แท็กของคุณให้ :

sudo timeout 60 dhclient $wifi || otherFunction

ตัวอย่าง:

sudo timeout 3 sleep 5 || echo finished early

สิ่งนี้ใช้ยูทิลิตี้การหมดเวลาที่จัดทำโดยแพ็คเกจ GNU coreutils บน Linux


2
ไม่ทำงานบน MacOS น่าเสียดาย
Alexander Mills

timeoutสำหรับ MacOS: stackoverflow.com/a/21118126/451480
Blaise

หากคุณต้องการตรวจสอบโดยเฉพาะสำหรับการtimeoutฆ่าคำสั่ง (ตรงข้ามกับคำสั่งที่ล้มเหลวด้วยเหตุผลอื่น ๆ ) ให้ตรวจสอบสถานะการออก 124
muru


2

ใช้timeoutบรรจุเป็นgtimeoutกับcoreutilsพอร์ตในbrew:

brew install coreutils
gtimeout --help

ที่จะทำงานร่วมกับคุณใน/usr/local/bin PATHหากคุณต้องการที่จะใช้timeoutเป็นชื่อเดิมเพิ่มที่คุณ/usr/local/opt/coreutils/libexec/gnubinPATH

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.