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:
$ 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.
rcfile
preparato che esegua i tuoi comandi Prepara file somercfile
:
source ~/.bashrc echo foo echo bar
Quindi esegui:
$ gnome-terminal -e "bash --rcfile somercfile"
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.