如何在Bash

时间:2016-06-23 02:46:00

标签: linux bash command timeout

我正在摆弄Linux命令" timeout":它只是在给定的秒数后停止长时间运行的命令。但我想暂停一个命令,而不是一组命令。我可以以两种方式()和{;}对命令进行分组,但是以下都不起作用:

timeout 1 { sleep 2; echo something; }
timeout 1 ( sleep 2; echo something )

如何通过分组来实现这一目标?

3 个答案:

答案 0 :(得分:11)

timeout不是shell实用程序,它不执行shell样式处理。必须给它一个单独的命令来执行。但是,该命令可以包含任意数量的参数。幸运的是,您可以提供的一个命令是bash

timeout 1 bash -c '{ sleep 2; echo something; }'

当然,在这种形式下,大括号现在是多余的:

timeout 1 bash -c 'sleep 2; echo something'

此处,bashtimeout执行的命令。 -csleep 2; echo something是该命令的参数。

答案 1 :(得分:4)

timeout 1 sh -c "sleep 2; echo something"

答案 2 :(得分:2)

您还可以使用Here Document EOF方法动态创建多行脚本。 它的主要优点是,您可以使用双引号而不逃脱

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

注意:

  1. EOF闭包不能跟随空格/制表符,而应位于最后一行的开头。
  2. 确保已使用export -f my_funcset -o allexport导出了所有函数的本地函数(在声明它们之前)。 这也与以前的答案有关,因为调用bash / sh会在新会话中运行该过程,而不会意识到本地环境功能。