Mac OSx上是否有替代超时命令。基本要求是我能够在指定的时间内运行命令。
e.g:
timeout 10 ping google.com
这个程序在Linux上运行ping 10秒。
答案 0 :(得分:103)
您可以使用
brew install coreutils
然后,只要您需要超时,请使用
gtimeout
...来代替。解释为什么这里是Homebrew警告部分的片段:
注意事项
所有命令都安装了前缀'g'。
如果您确实需要将这些命令与其正常名称一起使用,那么 可以从你的bashrc中为你的PATH添加一个“gnubin”目录,如:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
此外,如果添加,您可以使用普通名称访问其手册页 从你的bashrc到你的MANPATH的“gnuman”目录:
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
答案 1 :(得分:17)
另一个简单的方法是跨平台工作(因为它使用几乎无处不在的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' "$@";
答案 2 :(得分:7)
您可以使用此命令限制任何程序的执行时间:
ping -t 10 google.com & sleep 5; kill $!
答案 3 :(得分:2)
来自Ubuntu / Debian的Timeout Package可以在Mac上编译并且可以正常工作。 该套餐位于http://packages.ubuntu.com/lucid/timeout
答案 4 :(得分:1)
您可以执行ping -t 10 google.com >nul
&gt; nul摆脱了输出。因此,不是显示64 BYTES FROM 123.45.67.8 BLAH BLAH BLAH,它只会显示一个空白的换行符,直到它超时。 -t标志可以更改为任何数字。