Evita la chiusura di gnome-terminal dopo l’esecuzione dello script?

Ho creato uno script bash che apre diversi terminali gnome, connettersi ai computer dell’aula tramite ssh ed eseguire uno script.

Come posso evitare che gnome-terminal si chiuda dopo che lo script è finito? Nota che voglio anche essere in grado di inserire ulteriori comandi nel terminale.

Ecco un esempio del mio codice:

gnome-terminal -e "ssh [email protected] cd /tmp && ls" 

Come ho capito, vuoi che gnome-terminal si apra, fai eseguire alcuni comandi e poi fai un salto al prompt per poter inserire altri comandi. Gnome-terminal non è progettato per questo caso d’uso, ma ci sono soluzioni alternative:

Lascia che gnome-terminal esegua bash e dica a bash di eseguire i tuoi comandi e poi di eseguire bash

 $ gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\"" 

L’ exec bash alla fine è necessario perché bash -c terminerà una volta eseguiti i comandi. exec causa la sostituzione del processo in esecuzione con il nuovo processo, altrimenti si avranno due processi bash in esecuzione.

Lascia che gnome-terminal esegua bash con un file rcfile preparato che esegua i tuoi comandi

Prepara file somercfile :

 source ~/.bashrc echo foo echo bar 

Quindi esegui:

 $ gnome-terminal -e "bash --rcfile somercfile" 

Lascia che gnome-terminal esegua uno script che esegue i tuoi comandi e poi passa a bash

Prepara scripttobash :

 #!/bin/sh echo foo echo bar exec bash 

Imposta questo file come eseguibile.

Quindi esegui:

 $ gnome-terminal -e "./scripttobash" 

In alternativa puoi creare un genericscripttobash :

 #!/bin/sh for command in "[email protected]"; do $command done exec bash 

Quindi esegui:

 $ gnome-terminal -e "./genericscripttobash \"echo foo\" \"echo bar\"" 

Ogni metodo ha le sue stranezze. Devi scegliere, ma scegliere saggiamente. Mi piace la prima soluzione per la sua verbosità e la sua linearità.

Detto questo, questo potrebbe essere utile per te: http://www.linux.com/archive/feature/151340

Finalmente questo funziona per me:

 gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash" 
  • Stack Overflow answer: il terminale si chiude quando il comando eseguito al suo interno è terminato, quindi è necessario scrivere un comando che non si interrompa immediatamente. Ad esempio, per lasciare aperta la finestra del terminale fino a quando non premi Invio in esso:

     gnome-terminal -e "ssh host 'cd /tmp && ls'; read line" 
  • Risposta Super utente : crea un profilo in cui la preferenza “Titolo e comando / Quando il comando termina” è impostata su “Tenere aperto il terminale”. Richiama gnome-terminal con l’ --window-with-profile o --tab-with-profile per specificare il nome del terminale.

Esegui con -ic posto di -i per eseguire il terminale bash proccess quando chiudi il tuo terminale gui:

 gnome-terminal -e "bash -ic \"echo foo; echo bar; exec bash\"" 

La soluzione ideale sarebbe chiedere un input utente con echo ” Premere un tasto qualsiasi “.

Ma se fai doppio clic su Nautis o Nemo e selezioni l’esecuzione in un terminale, non sembra funzionare.

Nel caso di Ubuntu viene utilizzata una shell progettata per l’avvio rapido e l’esecuzione con le sole funzionalità standard, chiamata dash credo. Per questo motivo, lo shebang è la prima riga da cui partire per abilitare l’uso corretto delle funzioni di bash . Normalmente questo sarebbe: #! / Bin / bash o simile. In Ubuntu ho imparato che dovrebbe essere: #! / Usr / bin / env bash.

Esistono molti metodi per tenere a bada lo schermo prima che l’interprete veda un errore di syntax in un comando bash.

La soluzione in Ubuntu che ha funzionato per me:

 #!/usr/bin/env bash your code echo Press a key... read -n1 

Se si sta eseguendo uno script bash, aggiungere gedit afile alla fine dello script e questo terrà aperto gnome-terminal. “afile” potrebbe essere un log di costruzione che era nel mio caso.

Non ho provato a usare solo gedit , ma funzionerebbe anche correttamente.

Usa il comando nohup .

 nohup gnome-terminal -e "ssh [email protected] cd /tmp && ls" 

Spero che questo ti possa aiutare.