Kon*_*tin 7 linux bash command timeout
我正在摆弄Linux命令"timeout":它只是在给定秒后停止长时间运行的命令.但我想暂停一个命令,而不是一组命令.我可以以两种方式()和{;}对命令进行分组,但是以下都不起作用:
timeout 1 { sleep 2; echo something; }
timeout 1 ( sleep 2; echo something )
Run Code Online (Sandbox Code Playgroud)
我怎么能用分组来做到这一点?
Joh*_*024 12
timeout不是shell实用程序,它不执行shell样式处理.必须给它一个单独的命令来执行.但是,该命令可以包含任意数量的参数.幸运的是,您可以提供的命令之一是bash:
timeout 1 bash -c '{ sleep 2; echo something; }'
Run Code Online (Sandbox Code Playgroud)
当然,在这种形式下,大括号现在是多余的:
timeout 1 bash -c 'sleep 2; echo something'
Run Code Online (Sandbox Code Playgroud)
这bash是timeout执行的命令. -c并且sleep 2; echo something是该命令的参数.
您还可以使用Here Document EOF方法动态创建多行脚本。它的主要优点是您可以使用双引号而不转义它:
timeout 1s bash <<EOF
sleep 2s
echo "something without escaping double quotes"
EOF
Run Code Online (Sandbox Code Playgroud)
笔记:
export -f my_func或set -o allexport为所有函数导出(在声明它们之前)。这也与之前的答案相关,因为调用 bash/sh 在新会话中运行该进程,不知道本地环境函数。