O script que executa um comando com 'exec' não termina até que 'Enter' seja pressionado

0

Temos um script KSH que executa um processo usando exec e trava.
Queremos poder executá-lo automaticamente e mantê-lo em execução em segundo plano.

Nós tentamos isso:

./myScript.ksh &

No entanto, isso nos deixou esperando em "mid air", e ainda precisamos pressionar a tecla Enter para continuar.

A única solução encontrada foi alterar o script real para ficar assim:

....
exec <some command> &
exit 0

Sem os dois & e exit 0 , não funcionou.

Alguma solução melhor?

    
por RonK 04.08.2011 / 10:55

1 resposta

1

Eu tenho dificuldades em aceitar o seu primeiro exemplo em que você inicia o trabalho em segundo plano e diz que está deixando você em "mid-air" e você tem que pressionar [Enter] para continuar.

Note que qualquer saída produzida pelo script em segundo plano será impressa após o prompt do shell - dando a ilusão de um prompt ausente (na verdade, o prompt do shell já está lá, mas rolado para cima). Você não precisa pressionar [Enter] para entrar no próximo comando!

O segundo exemplo ( exec ... & ) não faz nenhum sentido: o "e" comercial instrui o shell a iniciar o comando como um processo paralelo em segundo plano, enquanto o exec instrui o shell a iniciar no novo processo de todo e executar o novo comando "reciclagem" do processo atual. Tecnicamente falado (muito simplificado): O código do programa shell será substituído pelo código do programa chamado.

Conclusão:

  • Você não precisa pressionar [Enter] (mas não é prejudicial se você fizer isso)

  • Como o shell script é iniciado como uma tarefa paralela, o e comercial pode ser omitido.

  • Usar exec faz todo o sentido, se o comando a ser iniciado for o último a ser executado pelo script, sacrificando o Shell e salvando um processo inútil.

[adicionado:] Apenas uma coisa veio à mente porque você pode pensar que você tem que pressionar [Enter]:

Enquanto o processo shell está exibindo o prompt de comando (aguardando seu próximo comando), não haverá notificação sobre os processos em segundo plano concluídos.

Você só receberá a notificação quando o shell exibir o próximo comando promt. Isso também pode levar à ilusão de que "é preciso pressionar [Enter] para permitir que um processo em segundo plano termine".

    
por 16.09.2011 / 11:17

Tags