Come eseguire uno script senza chiudere il terminale?


69

Ho uno script in archivio bla.shed è eseguibile. Quando faccio clic su di esso, lo script viene eseguito e la finestra viene chiusa. Vorrei che la finestra restasse aperta .

Qualcosa di simile al comando cmd /k** commandin Windows.

PS Non voglio usare pause, ma voglio poter scrivere più comandi dopo l'esecuzione dello script.

Risposte:


81

Metti $SHELLalla fine della tua sceneggiatura:

testo alternativo

Un piccolo difetto: poiché gnome-terminalnon è in esecuzione bashcome è shell, lo considererà come un'applicazione e visualizzerà un avviso al riguardo quando si tenta di chiudere il terminale:

There is still a process running in this terminal
Closing the terminal will kill it.

Non ho trovato un modo carino per nascondere questo avviso. Se lo desideri, puoi disabilitarlo interamente eseguendo:

gconftool --set /apps/gnome-terminal/global/confirm_window_close --type boolean false

Questo non succede se stai usando al xtermposto di gnome-terminal; dovrebbe disturbarti.


20
È possibile utilizzare exec $SHELLanziché semplicemente $SHELLper far scomparire l'avviso senza modificare le impostazioni.
Andrea Corbellini,

1
Ma questa soluzione crea una shell / processo extra. Questo può essere evitato?
lucasvc,

Non conosco un modo per farlo, no. Il problema è che perdi l'handle su IO standard una volta terminato il primo processo bash, quindi dovresti fare qualche trucco con un demone che passa su questi handle, che sarebbe quindi più soggetto a errori e fastidioso.
Stefano Palazzo

10

Usando il Terminale Gnome

Usando gnome-terminal aggiungendo; bash alla fine della stringa di comando e chiamando lo script con l'opzione -c funziona. Per esempio:

gnome-terminal -e "bash -c ~/script.sh;bash"

Questo fa quanto segue:

  1. apre gnome-terminal
  2. esegue lo script script.sh
  3. mostra il prompt di bash al termine dello script.

È possibile uscire dalla finestra di gnome-terminal chiudendo la finestra o digitare exit al prompt di bash. Oppure puoi digitare più comandi come richiesto.



7

Se hai accesso allo script, puoi anche aggiungere il seguente codice alla fine:

read

Quel codice attenderà un input prima della chiusura, quindi il terminale rimarrà aperto fino a quando non premi Invio.


1
Lo uso spesso bashalla fine, ma readmi permette di chiudere la finestra solo con ctrl+co enter, invece di ctrl+shift+wo alt+f4. Questo è utile quando si scorre rapidamente la tua sceneggiatura.
hsandt,

5

Usa l bash' --init-fileopzione con una pipe temporanea:

bash --init-file <(echo './<script_name>')

Ex:

bash --init-file <(echo './bla.sh')

2

L'uso xterme l'aggiunta ;bashalla fine della stringa di comando funzionano. Per esempio:

xterm -e "bash ~/script.sh;bash"

Questo fa quanto segue:

  1. apre xterm
  2. esegue lo script script.sh
  3. mostra il prompt di bash al termine dello script.

È possibile uscire dalla finestra xterm chiudendo la finestra o digitare exital prompt di bash. Oppure puoi digitare più comandi come richiesto.


1
xterm -e bash --rcfile bla.sh

Questo eseguirà lo script in una nuova finestra e ti darà anche il controllo della finestra una volta terminato.

Tuttavia, la nuova finestra non verrà caricata ~/.bashrcnormalmente, poiché abbiamo eseguito bla.shinvece. Questo può essere risolto mettendo

. ~/.bashrc

in cima a bla.sh

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.