web-dev-qa-db-ja.com

コマンドがX時間で完了しない場合はbashしますか?

私は次のようなものを実行しようとしています:

Sudo dhclient $wifi || otherFunction

問題は、dhclientが失敗すると、エラーをスローする代わりにハングするだけです。

dhclientが60秒以内に完了しない場合、otherFunctionが強制終了され、dhclientが呼び出されるように、上記を書き換えるにはどうすればよいですか?

13

あなたの timeout タグはそれをすべて与えます:

Sudo timeout 60 dhclient $wifi || otherFunction

例:

Sudo timeout 3 sleep 5 || echo finished early

これは、Linux上のGNU coreutilsパッケージによって提供される タイムアウトユーティリティ を使用します。

13
Jeff Schaller

timeoutgtimeoutポートでcoreutilsとしてパックされたbrewを使用します。

brew install coreutils
gtimeout --help

PATH/usr/local/binで動作します。 timeoutを元の名前で使用する場合は、PATH/usr/local/opt/coreutils/libexec/gnubinを追加します。

2
Garth Kidd

timeout を使用します。

timeout 2 sleep 1
echo $?
0

timeout 1 sleep 2
echo $?
124
2
Matt Clark