如何在Bash中超时一组命令

我摆弄Linux命令超时”:它只是在一个给定的秒后停止长时间运行的命令。 但是我想暂停一个命令,而不是一组命令。 我可以通过两种方式()和{;}对命令进行分组,但以下任何一种都不可行:

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

我怎么可以做到这一点与分组?

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 sleep 2; echo something是这个命令的参数。

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