Bash 如果命令没有在 X 时间内完成?

Bash 如果命令没有在 X 时间内完成?

我正在尝试运行类似的东西:

sudo dhclient $wifi || otherFunction

问题是当dhclient失败时它只是挂起而不是抛出错误。

如果60 秒内没有完成,我该如何重写上面的代码,以便dhclient被杀死并被otherFunction调用?dhclient

答案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/gnubin到您的PATH.

相关内容