Mac OS X 上的超时命令?

在 Mac OSx 上有超时命令的替代方案吗。基本的要求是我能够在指定的时间内运行一个命令。

例如:

timeout 10 ping google.com

这个程序在 Linux 上运行 ping 为10s。

77456 次浏览

你可以做 ping -t 10 google.com >nul

> null 删除输出。所以不会显示来自123.45.67.8 BLAH BLAH BLAH 它只会显示一个空白换行直到超时。- t 标志可以改为任何数字。

来自 Ubuntu/Debian 的 Timeout 包可以在 Mac 上编译,并且可以工作。 这个软件包可以在 http://packages.ubuntu.com/lucid/timeout”rel = “ nofollow norefrer”http://packages.ubuntu.com/lucid/timeout 找到

你可以用

brew install coreutils

然后当你需要暂停的时候,使用

gtimeout

为了解释为什么这里有一段摘自《家酿注意事项》的片段:

警告

所有命令都以前缀“ g”安装。

如果您确实需要使用这些命令的正常名称,则 可以从 bashrc 向 PATH 添加“ gnubin”目录,如下所示:

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

此外,如果添加 将“ gnuman”目录从 bashrc 转到 MANPATH:

MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

您可以使用以下命令限制任何程序的执行时间:

ping -t 10 google.com & sleep 5; kill $!

另一种跨平台工作的简单方法(因为它使用几乎无处不在的 perl)是:

function timeout() { perl -e 'alarm shift; exec @ARGV' "$@"; }

从这里抢来的: Https://gist.github.com/jaytaylor/6527607

不用把它放在函数里,你只需要把下面这行放在脚本里,它也会工作的:

暂停,嘘

perl -e 'alarm shift; exec @ARGV' "$@";

或内置了帮助/示例的版本:

暂停,嘘

#!/usr/bin/env bash


function show_help()
{
IT=$(cat <<EOF


Runs a command, and times out if it doesnt complete in time


Example usage:
 

# Will fail after 1 second, and shows non zero exit code result
$ timeout 1 "sleep 2" 2> /dev/null ; echo \$?
142


# Will succeed, and return exit code of 0.
$ timeout 1 sleep 0.5; echo \$?
0


$ timeout 1 bash -c 'echo "hi" && sleep 2 && echo "bye"' 2> /dev/null; echo \$?
hi
142


$ timeout 3 bash -c 'echo "hi" && sleep 2 && echo "bye"' 2> /dev/null; echo \$?
hi
bye
0
EOF
)
echo "$IT"
exit
}


if [ "$1" == "help" ]
then
show_help
fi
if [ -z "$1" ]
then
show_help
fi


#
# Mac OS-X does not come with the delightfully useful `timeout` program.  Thankfully a rough BASH equivalent can be achieved with only 2 perl statements.
#
# Originally found on SO: http://stackoverflow.com/questions/601543/command-line-command-to-auto-kill-a-command-after-a-certain-amount-of-time
#
perl -e 'alarm shift; exec @ARGV' "$@";

因为 KVZ 声明只是简单地使用自制程序:

brew install coreutils

现在,timeout命令已经可以使用 -不需要别名(也不需要 gtimeout,尽管也可以使用)。