Comando bash non bloccante


11

Diciamo che ho uno script bash con il seguente:

#!/bin/sh
gedit
rm *.temp

Quando lo eseguo usando sh ./test.sh, si geditapre ma la rmparte non viene eseguita fino alla chiusura gedit.

Voglio che lo script continui a funzionare anche se geditnon è chiuso; come il geditnon sta bloccando l'esecuzione bash.

L'esempio che ho dato è solo un esempio (mettere il rmprimo non funzionerà in una situazione reale).

Risposte:


25

Il termine che stai cercando si chiama "backgrounding" un lavoro. Quando si esegue un comando nella shell o in uno script, è possibile aggiungere un flag alla fine per inviarlo in background e continuare a eseguire nuovi comandi o il resto dello script. Nella maggior parte delle conchiglie incluso sh, questo è il &personaggio.

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

In questo modo, la shell non attende la fine di geditentrambi rme geditverrà eseguita contemporaneamente.

Il termine "blocco" di solito ha a che fare con flussi di input / output, spesso su file o su un dispositivo. È anche usato nei linguaggi compilati in qualcosa di simile al senso che hai usato, ma negli script di shell bash e simili, la terminologia (e la funzione!) È piuttosto diversa.


grazie! questo spiega perché stavo ottenendo solo FIFO e ho inserito i risultati su Google: D
Plante,

La mia impressione è che Plante voglia influenzare una sceneggiatura dall'esterno, eseguire ogni operazione in background, non riscrivere la sceneggiatura.
utente sconosciuto

@utente: mi ci sono voluti un paio di letture per indovinare anche quello che voleva. Forse potresti commentare la domanda per chiarimenti.
Caleb,

È esattamente quello di cui avevo bisogno, grazie ancora. funziona benissimo finora!
Plante,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.