Enquanto loop para verificação de processos ativos falhar

0

Eu criei um script de shell que estou executando usando o nohup. Esse script executa vários scripts SQL em sequência, mas poucos em paralelo também. Eu tenho as seguintes declarações no meu script -

echo exit | sqlplus -s ${username}/${pwd}@${DB} @close1.sql
echo exit | sqlplus -s ${username}/${pwd}@${DB} @close2.sql

echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing1.sql &
pid1=$!
echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing2.sql &
pid2=$!

echo "Pricing Insert PIDs => ${pid1}, ${pid2}"

while [ 'ps -p ${pid1},${pid2} | wc -l' > 1 ]
do
sleep 5
done

echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing3.sql

A intenção é executar close1 - > close2 - > insertPricing1 & insertingPricing2 em paralelo - > insertPricing3. onde - > significa em seqüência.

Quando eu chequei o resultado no dia seguinte (depois de um tempo suficiente, ele deveria ter sido completado), vi que o shell script ainda estava rodando. Pricing1 e Pricing2 foram feitos, mas o Pricing3 não começou. Os processos para 1 e 2 terminaram.

ps -p 19105,19107

  PID TTY          TIME CMD

Existe algum problema no loop while quando executo isso em

 # ps -p 19105,19107 | wc -l
1

mas isso -

# while [ 'ps -p 19105,19107 | wc -l' > 1 ]
> do
> echo "hello"
> done
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
........ ctrl+C

então por que esse loop funciona quando 1 não é maior que 1? Qual deve ser a solução?

    
por abhihello123 26.03.2017 / 19:58

1 resposta

2

Graças ao comentário da @ steeldriver por me ajudar. Foi um erro bobo do meu lado. > é considerado como operador de redirecionamento dentro de [] (ou a maioria dos lugares em um script de shell). A maneira padrão de usar é -gt

Para comparar inteiros de acordo com a resposta no link -

-eq  #Is equal
-ne  #Is not equal
-lt  #Less than
-le  #Less than or equal
-gt  #Greater than
-ge  #Greater than or equal
    
por 26.03.2017 / 20:14