我有一个如下所示的 shell 脚本:
echo firstOutput
read -s
command0
command1a
command1b
command1c
echo secondOutput
command2
command1a
、、是单独的命令command1b
,command1c
但它们可以按任意顺序执行,并且按照以下解释的意义来说是一个组。
我现在想改进它,这样即使一个命令卡住了,脚本也能继续运行。command0
需要先执行,并且有 8 秒钟的时间来运行。如果它在 8 秒内没有完成,脚本将继续command1[a-c]
运行,总共有 5 秒钟的时间。如果它们没有在给定的 5 秒内终止,command2
则应调用。以防万一这很重要:command2
是此脚本的最后一个命令。
编辑:澄清一下:我知道如何编写一个在允许的最大时间内执行命令的脚本。但是,这些都是超时,我希望脚本尽可能快地运行。整个脚本通常在按下 Enter 键后几分之一秒内运行完毕(参见第行read -s
)。
答案1
echo firstOutput
read -s
command0 &
sleep 8
command1a &
command1b &
command1c &
sleep 5
echo secondOutput
command2
答案2
该timeout
命令确实执行了您想要的操作。请参阅man timeout
:
NAME
timeout - run a command with a time limit
SYNOPSIS
timeout [OPTION] DURATION COMMAND [ARG]...
timeout [OPTION]
DESCRIPTION
Start COMMAND, and kill it if still running after DURATION.