Limitador de tempo para execução de comandos no script Bash / Shell

2

Eu tenho um script de shell que se parece com isso:

echo firstOutput
read -s
command0
command1a
command1b
command1c
echo secondOutput
command2

command1a , command1b , command1c são comandos individuais mas podem ser executados em ordem arbitrária e são um grupo no sentido da seguinte explicação.

Agora quero melhorar o script para que o script continue, mesmo se um comando ficar preso. command0 precisa ser executado primeiro e tem 8 segundos para operar. Se não chegar dentro de 8 segundos, o script continuará para command1[a-c] , que juntos têm 5 segundos para operar. Se eles não terminarem dentro de 5 segundos, command2 será chamado. Apenas no caso de isso ser importante: command2 é o último comando deste script.

Edit: Para esclarecer: Eu sei como fazer um script que executa os comandos no tempo máximo permitido. No entanto, esses são tempos limite e quero que o script seja executado o mais rápido possível. O script inteiro geralmente é executado em uma fração de segundo depois que enter é pressionado (veja a linha read -s ).

    
por UTF-8 10.04.2015 / 02:35

2 respostas

3

echo firstOutput
read -s

command0 &
sleep 8

command1a &
command1b &
command1c &
sleep 5

echo secondOutput
command2
    
por glenn jackman 10.04.2015 / 04:03
0

O comando timeout faz exatamente o que você parece querer. Veja 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.
    
por waltinator 10.04.2015 / 05:12