Bash jika perintah tidak selesai dalam waktu X?


12

Saya mencoba menjalankan sesuatu seperti:

sudo dhclient $wifi || otherFunction

Masalahnya adalah ketika dhclientgagal itu hanya hang bukannya melempar kesalahan.

Bagaimana saya bisa menulis ulang di atas sehingga dhclientterbunuh dan otherFunctiondipanggil jika dhclienttidak selesai dalam 60 detik?

Jawaban:


12

Tag Anda memberikan semuanya:

sudo timeout 60 dhclient $wifi || otherFunction

Sebuah contoh:

sudo timeout 3 sleep 5 || echo finished early

Ini menggunakan utilitas batas waktu yang disediakan oleh paket GNU coreutils di Linux.


2
sayangnya tidak bekerja pada MacOS
Alexander Mills


Jika Anda ingin memeriksa secara khusus untuk timeoutmembunuh perintah (yang bertentangan dengan perintah gagal karena alasan lain), periksa status keluar 124.
muru


2

Gunakan paket timeoutseperti gtimeoutpada coreutilsport di brew:

brew install coreutils
gtimeout --help

Itu akan bekerja dengan /usr/local/binAnda PATH. Jika Anda ingin menggunakan timeoutseperti aslinya, tambahkan /usr/local/opt/coreutils/libexec/gnubinke PATH.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.