Os comandos em um script bash são executados em paralelo ou um após o outro?

7

Pegue o seguinte script de shell, por exemplo:

#!/bin/bash
python do_this_first.py 
python do_this_second.py
python do_this_last.py

Quando executo o acima, os 3 scripts python funcionarão paralelamente? Como eu quero que 'do_this_second' seja executado somente depois que 'do_this_first' for concluído.

    
por Ruth 28.06.2012 / 20:43

3 respostas

21

Como está, eles serão executados um após o outro, independentemente de terem falhado ou não. Eles só precisam sair em algum momento, depois o próximo comando é executado. Um após o outro.

Se você quiser que eles sejam executados somente se os comandos anteriores não forem encerrados com um erro, use:

python do_this_first.py && python do_this_second.py && python do_this_last.py

Aqui, os dois e-mails funcionam como um AND lógico. O segundo script só será executado quando o primeiro sair limpo e o terceiro somente quando o segundo for executado sem erros. Se houver algum erro, nenhum dos seguintes comandos será executado.

Se, no entanto, você quiser executá-los em paralelo, poderá fazer isso, mas há muitas outras opções:

python do_this_first.py &
python do_this_second.py &
python do_this_last.py &
    
por 28.06.2012 / 20:47
2

O bash é seqüencial. No começo, o arquivo do_this_first.py será interpretado. Depois que o Python termina de executá-lo, o controle é transferido para o bash novamente. O bash, por sua vez, executará o python do_this_second.py e assim por diante.
Então, essencialmente, do_this_first começa e termina, do_this_second começa e termina e então do_this_last começa e termina.

    
por 28.06.2012 / 20:48
2

Como slhck disse, o seguinte é uma opção.

python do_this_first.py && python do_this_second.py && python do_this_last.py

Ou você pode definir -e, que sairá imediatamente, se uma linha retornar um código de erro.

#!/bin/bash

# Exit immediately if a command exits with a non-zero status.
set -e

python do_this_first.py 
python do_this_second.py
python do_this_last.py

Para mim, este último é mais legível.

    
por 30.09.2014 / 15:12

Tags