Bash X時間内にコマンドが完了しない場合はどうなりますか?

Bash X時間内にコマンドが完了しない場合はどうなりますか?

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

sudo dhclient $wifi || otherFunction

問題は、dhclient失敗するとエラーが発生するのではなく中断されることです。

60秒以内に完了しない場合は、終了して呼び出すためにdhclient上記のコードをどのように書き換えることができますか?otherFunctiondhclient

答え1

あなたのラベルはすべてを提供します。

sudo timeout 60 dhclient $wifi || otherFunction

一例:

sudo timeout 3 sleep 5 || echo finished early

これは以下を使用します。タイムアウトユーティリティLinuxのGNU coreutilsパッケージで提供されています。

答え2

使用timeout

timeout 2 sleep 1
echo $?
0

timeout 1 sleep 2
echo $?
124

答え3

timeoutポートと同じラッパーを使用してください。gtimeoutcoreutilsbrew:

brew install coreutils
gtimeout --help

/usr/local/binになりますPATH。元の名前として使用するには、にtimeout追加してください。/usr/local/opt/coreutils/libexec/gnubinPATH

関連情報