Comando bash sem bloqueio

11

Digamos que eu tenho um script bash com o seguinte:

#!/bin/sh
gedit
rm *.temp

Quando o executo usando sh ./test.sh, geditaparece, mas a rmpeça não é executada até depois que eu fecho gedit.

Quero que o script continue em execução, mesmo que geditnão esteja fechado; como geditse não estivesse bloqueando a execução do bash.

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

Plante
fonte

Respostas:

25

O termo que você está procurando é chamado de "trabalho em segundo plano". Quando você executa um comando em seu shell ou em um script, pode adicionar um sinalizador no final para enviá-lo ao segundo plano e continuar executando novos comandos ou o restante do script. Na maioria dos reservatórios sh, inclusive , esse é o &personagem.

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

Dessa forma, o shell não espera pelo término de geditambos rme geditserá executado simultaneamente.

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

Caleb
fonte
obrigado! que explicam por que eu só estava ficando FIFO e resultados de entrada no Google: D
Plante
Minha impressão é que o Plante quer influenciar um script de fora, executar cada operação em segundo plano, não reescrever o script.
usuário desconhecido
@user: Levei algumas leituras para adivinhar o que ele queria. Talvez você possa comentar a questão para esclarecimentos.
Caleb
Era exatamente disso que eu precisava, obrigado novamente. funciona muito bem até agora!
Plante