如何超时一组bash中的命令



我正在摆弄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'

在这里,bashtimeout执行的命令。-csleep 2; echo something是该命令的参数。

您还可以使用此处的文档EOF方法即时创建多行脚本。它的主要优点是您可以使用双引号而无需逃脱 IT:

timeout 1s bash <<EOF
    sleep 2s
    echo "something without escaping double quotes"  
EOF

注意:

  1. EOF闭合不得遵循空间/标签,而是在最后一行的开始。
  2. 确保您已使用export -f my_funcset -o allexport导出了所有功能(在声明它们之前)。这也与以前的答案有关,因为致电Bash/SH在新会话中运行该过程,因此对本地环境的功能不知道。
timeout 1 sh -c "sleep 2; echo something"

相关内容

  • 没有找到相关文章

最新更新