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
Александр Миллс


Если вы хотите проверить специально для timeoutуничтожения команды (в отличие от сбоя команды по другим причинам), проверьте статус выхода 124.
Муру


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.