gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:04:35 25 4
gpt4 key购买 nike

如果进程超过几秒,我会尝试终止它。

当我在终端中运行时,以下工作正常。

timeout 2 sleep 5

但是当我有一个脚本时——

#!/bin/bash
timeout 2 sleep 5

它说

timeout: command not found

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

--编辑--

在执行类型超时时,它说 -

timeout is a shell function

最佳答案

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

所以只需检查超时命令的路径:

command -v timeout

在你的脚本中使用绝对路径

例如

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

更新 1#

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

更新 2#timeout 命令从 coreutils 版本添加 => 8.12.197-032bb,如果 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}"

Source

关于linux - 为什么超时在 bash 脚本中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22714787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com