如何使 Bash 中的一组命令超时
How to timeout a group of commands in Bash
我正在摆弄 Linux 命令 "timeout":它只是在给定的秒数后停止一个长的 运行 命令。但我想超时的不仅仅是一个命令,而是一组命令。我可以用两种方式 ( ) 和 { ;} 对命令进行分组,但是 none 以下作品:
timeout 1 { sleep 2; echo something; }
timeout 1 ( sleep 2; echo something )
如何使用分组来做到这一点?
timeout 1 sh -c "sleep 2; echo something"
timeout
不是 shell 实用程序,它不进行 shell 风格的处理。必须给它一个命令才能执行。不过,该命令可以有任意数量的参数。幸运的是,您可以给它的命令之一是 bash
:
timeout 1 bash -c '{ sleep 2; echo something; }'
当然,在这种形式中,大括号现在是多余的:
timeout 1 bash -c 'sleep 2; echo something'
这里,bash
是timeout
执行的命令。 -c
和 sleep 2; echo something
是该命令的参数。
您还可以使用 Here Document EOF 方法即时创建多行脚本。
它的主要优点是,您可以 使用双引号而无需转义 它:
timeout 1s bash <<EOF
sleep 2s
echo "something without escaping double quotes"
EOF
备注:
- EOF 闭包不能跟在 spaces/tabs 之后,而是在最后一行的开头。
- 确保您已经为所有函数导出了
export -f my_func
或 set -o allexport
的局部函数(在声明它们之前)。 这也与之前的答案相关,因为在新会话中调用 bash/sh 运行 进程,不知道本地环境函数。
我正在摆弄 Linux 命令 "timeout":它只是在给定的秒数后停止一个长的 运行 命令。但我想超时的不仅仅是一个命令,而是一组命令。我可以用两种方式 ( ) 和 { ;} 对命令进行分组,但是 none 以下作品:
timeout 1 { sleep 2; echo something; }
timeout 1 ( sleep 2; echo something )
如何使用分组来做到这一点?
timeout 1 sh -c "sleep 2; echo something"
timeout
不是 shell 实用程序,它不进行 shell 风格的处理。必须给它一个命令才能执行。不过,该命令可以有任意数量的参数。幸运的是,您可以给它的命令之一是 bash
:
timeout 1 bash -c '{ sleep 2; echo something; }'
当然,在这种形式中,大括号现在是多余的:
timeout 1 bash -c 'sleep 2; echo something'
这里,bash
是timeout
执行的命令。 -c
和 sleep 2; echo something
是该命令的参数。
您还可以使用 Here Document EOF 方法即时创建多行脚本。 它的主要优点是,您可以 使用双引号而无需转义 它:
timeout 1s bash <<EOF
sleep 2s
echo "something without escaping double quotes"
EOF
备注:
- EOF 闭包不能跟在 spaces/tabs 之后,而是在最后一行的开头。
- 确保您已经为所有函数导出了
export -f my_func
或set -o allexport
的局部函数(在声明它们之前)。 这也与之前的答案相关,因为在新会话中调用 bash/sh 运行 进程,不知道本地环境函数。