Come posso creare uno script che apra finestre di terminale ed esegua comandi al loro interno?

115

Ho tre script che devo eseguire quando avvio la mia macchina Ubuntu, avviano i servizi che uso nel mio ambiente di sviluppo.

Per farlo, apro manualmente tre terminali e digito i comandi.

C'è un modo per creare uno script che aprirà tre terminali ed eseguirà un comando in ognuno di questi? (Ogni comando dovrebbe essere in una finestra terminale separata in modo che possa vedere il loro output).

    
posta JSBach 02.06.2011 - 21:58
fonte

5 risposte

116
gnome-terminal -e command

o

xterm -e command

o

konsole -e command

Praticamente

terminal -e command

Per far rimanere il terminale quando il comando termina:

In konsole c'è un --noclose flag.

In xterm, c'è un flag -hold .

In gnome-terminal , vai a Modifica - & gt; Preferenze profilo - & gt; Titolo . Fai clic sulla scheda Comando . Seleziona Tieni il terminale dal menu a discesa etichettato quando il comando termina . Dovresti creare un nuovo profilo per questo ed eseguirlo con

gnome-terminal --window-with-profile=NAMEOFTHEPROFILE -e command
    
risposta data nickguletskii 02.06.2011 - 22:03
fonte
49

Invece del% codificatore% co_de, gnome-terminal , eccetera, usa il sistema Alternativo. Il programma che esegue l'emulatore di terminale predefinito è:

x-terminal-emulator

Sul mio sistema, apre una nuova istanza di Konsole ogni volta che eseguo questo comando.

Fortunatamente, i terminali sembrano supportare l'opzione konsole per l'esecuzione di un comando (l'ho verificato per -e e konsole ). Gli argomenti dopo il comando vengono passati al comando invocato. Bash si rifiuta di rimanere aperto nel mio terminale, è necessario uno script aggiuntivo per ottenere un terminale:

#!/bin/sh
"$@"
exec "$SHELL"

Se hai salvato lo script precedente come gnome-terminal e lo hai reso eseguibile, eseguirai i tuoi script con:

x-terminal-emulator -e /home/user/hacky your-script optional arguments here

Il percorso completo è richiesto e /home/user/hacky deve essere eseguibile.

Il mio precedente tentativo di eseguire uno script in una nuova finestra di terminale può essere trovato in revisione # 2 , era prima Ho realizzato che gli argomenti possono essere passati a /home/user/hacky .

    
risposta data Lekensteyn 02.06.2011 - 22:29
fonte
8

Semplicemente -

#!/bin/bash

/etc/init.d/ccpd status

Questo è sufficiente per altri comandi che non hanno bisogno di visualizzare nulla nel terminale. Ma qui bisogna vedere lo stato visualizzato.
Quindi, è necessario eseguire in una finestra di terminale

#!/bin/bash

gnome-terminal -e "/etc/init.d/ccpd status"  --window-with-profile=NAMEOFTHEPROFILE

L'altro post destinato [] a essere un segnaposto

Qui "NAMEOFTHEPROFILE" deve essere sostituito con il nome del profilo che "Mantiene il terminale quando il comando termina".

    
risposta data Karthik T 23.01.2013 - 10:31
fonte
1

commentando la risposta di Lekensteyn. So che questo è un vecchio post, ma per chiunque lo trovi utile (come ho appena fatto) Invece di creare un altro "script hacky" con solo mettere una funzione all'interno dello script che stai chiamando

hacky_function()
{
"$@"
exec "$SHELL"
}

Chiama il tuo script con "x-terminal-emulator -e / path / to / script hacky_function argomenti opzionali qui"

Non dimenticare di mettere "$ @" alla fine dello script

    
risposta data Sruli 06.12.2017 - 21:11
fonte
-2

Utilizza il comando sullo schermo e -D staccare da una sessione di schermo esistente e ricollegare qui -m forza una nuova sessione sullo schermo -S crea una sessione denominata invece di utilizzare il nome predefinito

    
risposta data Jack Heath 13.04.2014 - 22:00
fonte

Leggi altre domande sui tag