Comando bash não-bloqueante

9

Digamos que eu tenha um script bash com o seguinte:

#!/bin/sh
gedit
rm *.temp

Quando eu o executar usando sh ./test.sh , gedit pops-up, mas a parte rm não será executada até que eu feche gedit .

Eu quero que o script continue sendo executado, mesmo se gedit não estiver fechado; como o gedit não está bloqueando a execução do bash.

O exemplo que dei é apenas um exemplo (colocar o rm primeiro não funcionará em uma situação real).

    
por Plante 02.07.2011 / 21:21

1 resposta

22

O termo que você está procurando é chamado de "backgrounding" de um trabalho. Quando você executa um comando no shell ou em um script, é possível adicionar um sinalizador no final para enviá-lo para o segundo plano e continuar executando novos comandos ou o restante do script. Na maioria dos shells, incluindo sh , esse é o caractere & .

#!/bin/sh
gedit &
rm ./*.temp

Dessa forma, o shell não aguarda a finalização de gedit e os dois rm e gedit serão executados simultaneamente.

O termo "bloqueio" geralmente tem a ver com fluxos de entrada / saída, muitas vezes para arquivos ou um dispositivo. Ele também é usado em linguagens compiladas em algo similar ao sentido que você usou, mas no bash e scripts de shell similares, a terminologia (e função!) É bastante diferente.

    
por 02.07.2011 / 22:12