Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么超时在bash脚本中不起作用?_Linux_Bash_Timeout - Fatal编程技术网

Linux 为什么超时在bash脚本中不起作用?

Linux 为什么超时在bash脚本中不起作用?,linux,bash,timeout,Linux,Bash,Timeout,我试图在进程超过几秒钟时终止它 当我在终端中运行它时,下面的代码工作得很好 timeout 2 sleep 5 但当我有剧本的时候- #!/bin/bash timeout 2 sleep 5 上面说 超时:找不到命令 为什么会这样?解决办法是什么 --编辑-- 在执行类型超时时,它表示- timeout是一个shell函数 您的环境$PATH变量似乎不包含/usr/bin/路径,或者可能是超时二进制文件存在于其他地方 因此,只需使用以下命令检查超时命令的路径: command -v tim

我试图在进程超过几秒钟时终止它

当我在终端中运行它时,下面的代码工作得很好

timeout 2 sleep 5
但当我有剧本的时候-

#!/bin/bash
timeout 2 sleep 5
上面说

超时:找不到命令

为什么会这样?解决办法是什么

--编辑--

在执行类型超时时,它表示-

timeout是一个shell函数


您的环境
$PATH
变量似乎不包含
/usr/bin/
路径,或者可能是
超时
二进制文件存在于其他地方

因此,只需使用以下命令检查超时命令的路径:

command -v timeout
并在脚本中使用绝对路径

Ex.

#!/bin/bash
/usr/bin/timeout 2 sleep 5
更新1#

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

更新2#
timeout
从coreutils版本=>
8.12.197-032bb
添加的命令,如果GNU超时不可用,您可以使用expect(默认情况下,Mac OS X、BSD等通常没有GNU工具和实用程序)

示例:

timeout 10 "ls ${HOME}"

如果在shell中运行
键入timeout
,您会得到什么?@user657592您使用的是哪个bash版本?并且还要检查
/usr/bin/timeout
是否存在,如果运行
键入-a timeout
,您得到的唯一
超时值是多少?一般来说,如果在某个地方实现了函数,则需要导出该函数,以便在脚本中使用它,但像@RahulPatil提到的超时通常只是一个c函数,除非您有其他实现。@BroSlow-相同
timeout是一个shell函数
@user657592将
export-f timeout
添加到
.bashrc
或实现它的任何地方。然后重新获取init文件的源代码(例如,使用
source.bashrc
),然后再次尝试运行该脚本。您使用的是哪个bash版本?同时检查
/usr/bin/timeout
是否存在使用绝对路径没有帮助。然后它说-/usr/bin/timeout:在脚本中找不到这样的文件或目录,在开始时,它说-
启动AutoMATCH程序alling Main dispatch ex program filename:
timeout 10 "ls ${HOME}"