我正在摆弄Linux命令"超时":它只是在给定秒后停止一个长期运行的命令。但是我不仅要超时,而且要超时一组命令。我可以以两种方式()和{;}分组命令,但是以下任何工作都不是:
timeout 1 { sleep 2; echo something; }
timeout 1 ( sleep 2; echo something )
我该如何进行分组?
timeout
不是外壳实用程序,也不进行外壳式处理。必须给出一个单个命令才能执行。但是,该命令可以具有许多参数。幸运的是,您可以给它的命令之一是bash
:
timeout 1 bash -c '{ sleep 2; echo something; }'
当然,以这种形式,牙套现在是多余的:
timeout 1 bash -c 'sleep 2; echo something'
在这里,bash
是timeout
执行的命令。-c
和sleep 2; echo something
是该命令的参数。
您还可以使用此处的文档EOF方法即时创建多行脚本。它的主要优点是您可以使用双引号而无需逃脱 IT:
timeout 1s bash <<EOF
sleep 2s
echo "something without escaping double quotes"
EOF
注意:
- EOF闭合不得遵循空间/标签,而是在最后一行的开始。
- 确保您已使用
export -f my_func
或set -o allexport
导出了所有功能(在声明它们之前)。这也与以前的答案有关,因为致电Bash/SH在新会话中运行该过程,因此对本地环境的功能不知道。
timeout 1 sh -c "sleep 2; echo something"