executa outro processo depois que o processo em segundo plano é concluído

2

disse que eu tenho o script de loop no arquivo test.sh, eu só quero executar o script "running_script2.sh" depois que o processo de fundo estiver concluído, o que eu tento assim, mas não está funcionando.

for id in 1 2 3
do
bash running_script1.sh $id &   (#complete 1 minute/looping)
done
wait
echo "running script2 ..."
bash running_script2.sh

seu trabalho quando:

bash running_script1.sh 1 &
bash running_script1.sh 2 &
bash running_script1.sh 3 &
wait
echo "running script2 ..."
bash running_script2.sh

mas não é eficiente

    
por Anggoro Setiawan 13.08.2018 / 05:19

2 respostas

1

Não há diferença semântica entre

for id in 1 2 3
do
bash running_script1.sh $id &   (#complete 1 minute/looping)
done

e

bash running_script1.sh 1 &
bash running_script1.sh 2 &
bash running_script1.sh 3 &
wait
echo "running script2 ..."
bash running_script2.sh

Este script de demonstração abaixo executa pouco mais de 3s (você pode usar time ), independentemente de o comando de condição ser true ou false :

#!/bin/sh -eu
for i in 1 2 3; do
    echo "sleep $i" > $i && chmod +x $i
done
if false; then
    for i in 1 2 3; do
        bash ./$i &
    done
else
    bash ./1 &
    bash ./2 &
    bash ./3 &
fi
wait

Se você ainda estiver com discrepâncias, poste uma ferramenta .

    
por 13.08.2018 / 16:31
0

Não sei se essa é uma abordagem correta, mas usei a tela para executar o script
screen é um terminal virtual para executar o processo em bg

for id in 1 2 3
do
screen -d -m bash script1.sh $id
done
wait
echo "running script2 ..."
bash script2.sh

screen -d -m executará o script e fechará a tela após a conclusão do script.
Não consigo obter a saída de script1 na saída padrão enquanto uso a tela, então usei um arquivo para armazenar a saída de script1.

    
por 13.08.2018 / 06:46