为什么timeout在bash脚本中不起作用?

如果超过几秒钟,我试图杀死一个进程。

当我在terminal中运行它时,下面的工作很好。

timeout 2 sleep 5 

但是当我有一个脚本 –

 #!/bin/bash timeout 2 sleep 5 

它说

超时:找不到命令

为什么这样? 什么是解决方法?

– 编辑 –

在执行types超时时,它说 –

超时是一个shell函数

看来你的环境$PATH变量不包含/usr/bin/ path,或者可能是其他地方存在的timeout二进制文件。

所以只需使用以下命令来检查超时命令

 command -v timeout 

并在脚本中使用绝对路径

防爆。

 #!/bin/bash /usr/bin/timeout 2 sleep 5 

更新1#

根据你的更新,它是在你的shell中创建的函数。 您可以在脚本中使用绝对路径,如上例所述。

从coreutils版本=> 8.12.197-032bb添加更新2# timeout命令,如果GNU超时不可用,您可以使用expect(Mac OS X,BSD,…通常不包含GNU工具和实用程序)。

 ################################################################################ # Executes command with a timeout # Params: # $1 timeout in seconds # $2 command # Returns 1 if timed out 0 otherwise timeout() { time=$1 # start the command in a subshell to avoid problem with pipes # (spawn accepts one command) command="/bin/sh -c \"$2\"" expect -c "set echo \"-noecho\"; set timeout $time; spawn -noecho $command; expect timeout { exit 1 } eof { exit 0 }" if [ $? = 1 ] ; then echo "Timeout after ${time} seconds" fi } 

例:

 timeout 10 "ls ${HOME}" 

资源