Bash nếu lệnh không hoàn thành trong thời gian X?


12

Tôi đang cố chạy một cái gì đó như:

sudo dhclient $wifi || otherFunction

Vấn đề là khi dhclientthất bại, nó chỉ bị treo thay vì ném lỗi.

Làm thế nào tôi có thể viết lại những điều trên để dhclientbị giết và otherFunctionđược gọi nếu dhclientkhông hoàn thành trong 60 giây?

Câu trả lời:


12

Thẻ của bạn cung cấp cho tất cả đi:

sudo timeout 60 dhclient $wifi || otherFunction

Một ví dụ:

sudo timeout 3 sleep 5 || echo finished early

Điều này sử dụng tiện ích hết thời gian được cung cấp bởi gói GNU coreutils trên Linux.


2
Thật không may, không hoạt động trên MacOS
Alexander Mills


Nếu bạn muốn kiểm tra cụ thể để timeoutgiết lệnh (trái ngược với lệnh không thành công vì lý do khác), hãy kiểm tra trạng thái thoát 124.
muru


2

Sử dụng timeoutđóng gói như gtimeoutvới coreutilscổng trong brew:

brew install coreutils
gtimeout --help

Điều đó sẽ làm việc với /usr/local/binbạn PATH. Nếu bạn muốn sử dụng timeoutnhư tên ban đầu, hãy thêm /usr/local/opt/coreutils/libexec/gnubinvào của bạn PATH.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.