我正在摆弄Linux命令" timeout":它只是在给定的秒数后停止长时间运行的命令。但我想暂停一个命令,而不是一组命令。我可以以两种方式()和{;}对命令进行分组,但是以下都不起作用:
timeout 1 { sleep 2; echo something; }
timeout 1 ( sleep 2; echo something )
如何通过分组来实现这一目标?
答案 0 :(得分:11)
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
是该命令的参数。
答案 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
注意:
export -f my_func
或set -o allexport
导出了所有函数的本地函数(在声明它们之前)。 这也与以前的答案有关,因为调用bash / sh会在新会话中运行该过程,而不会意识到本地环境功能。