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вбивство команди (на відміну від відмови команди з інших причин), перевірте стан виходу 124.
muru


2

Використовуйте timeoutупакований як gtimeoutз coreutilsпортом у brew:

brew install coreutils
gtimeout --help

Це буде працювати /usr/local/binу вашому PATH. Якщо ви хочете використовувати, timeoutяк назвали спочатку, додайте /usr/local/opt/coreutils/libexec/gnubinдо свого PATH.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.