Apertura di più schede con gnome-terminal


16

Sto cercando di creare un comando che aprirà 3 servizi dallo stack Rails, rails s, spork e autotest. Posso eseguire questi comandi singolarmente aprendo 3 terminali, andando nella cartella dell'app ed eseguendoli. Posso anche aprire 3 nuove schede ed eseguire i comandi su ciascuna.

Il problema è che falliscono quando provo ad aprire le schede tramite gnome-terminal in questo modo:

gnome-terminal --tab --title="rails s" -e "rails s" --tab --title="spork" -e "spork" --tab --title="autotest" -e "autotest"

Errore (per spork e autotest):

There was an error creating the child process for this terminal
Failed to execute child process "spork" (No such file or directory)

Sorprendentemente funziona con 'rails s' (la scheda mostra il server in esecuzione).

Qualche idea?

Risposte:


9

Di seguito è una risposta da stackoverflow.com

  1. Aggiungi eval "$BASH_POST_RC"a alla fine del tuo .bashrc

  2. Impostare la BASH_POST_RCvariabile di ambiente per ciascuna scheda sul comando che si desidera eseguire, ad esempio: gnome-terminal --working-directory="/home/zardoz/projects/my_rails_app" --tab -e 'bash -c "export BASH_POST_RC=\"rails server\"; exec bash"' --tab -e 'bash -c "export BASH_POST_RC=\"autotest\"; exec bash"'


15

Invocando gnome-terminal tre volte e mettere insieme i comandi insieme && non funzionerà, e le schede non appariranno nello stesso terminale, e in effetti dovrai uscire dal primo terminale per far apparire il successivo.

Il modo per assicurarsi che tutte le schede si aprano contemporaneamente in un'istanza gnome-terminalè di utilizzare il--tab-with-profile=PROFILENAME opzione. Nel comando seguente puoi lasciare il primo comando in gnome-terminal --tabquanto è la prima finestra da generare; ora tutto ciò che devi sapere è quale profilo stai usando e puoi usare --tab-with-profile=YourProfileper invocare gli altri comandi e appariranno tutti in una volta nel terminale originale aperto.

Ecco il tuo comando modificato:

gnome-terminal --tab --title="rails s" -e "rails s" --tab-with-profile=Default --title="spork" -e "spork" --tab-with-profile=Default --title="autotest" -e "autotest"

(Per i lettori futuri: sostituisci i nomi dei programmi indicati in seguito -eper testare la riga di comando fornita qui; ricorda che i tuoi target -edevono essere installati e in$PATH ; per le cose che non $PATHusano un percorso assoluto come, ad esempio, /opt/mike/program)

Ricordarsi di specificare il profilo effettivo che si sta utilizzando per gli --tab-with-profileswitch. La prima invocazione di gnome-terminaldeve usare --tabe tutto il resto--tab-with-profile . Con questo metodo dovrebbe essere possibile aprire un gran numero di schede tutte nella stessa istanza di gnome-terminal.

Trova il profilo che stai utilizzando facendo clic con il pulsante destro del mouse gnome-terminale guarda i profili e ci sarà un marcatore su quello che stai utilizzando:

inserisci qui la descrizione dell'immagine

Vai a Preferenze profilo per ulteriori informazioni e per controllare il nome del profilo.

Per ulteriori informazioni, consultare man gnome-terminale le manpage di Ubuntu online .


Nota :

In caso di problemi con l'avvio dei programmi gnome-terminal, aggiungere la posizione $PATHo creare un collegamento simbolico e posizionarlo in una $PATHposizione oppure (cosa è stato molto utile qui): creare un semplice script wrapper bash e chiamarlo nella gnome-terminalriga di comando sopra. (Devi chiamarlo con un percorso assoluto: cioè/location/of/script e non solo il suo nome.)

Come esempio:

#!/bin/bash
cd $HOME/.rvm/gems/ruby-2.0.0-p0/bin 
spork
exit 0

Quindi assegna un nome allo script, rendilo eseguibile e chiamalo nella gnome-terminalriga di comando sopra. Fallo per tutti i programmi non repo che sono problematici.


Come faccio a sapere il profilo? (Ho provato con Default, il mio nome utente e ~ / .profile)
Manuel

Dice Default ma ottengo lo stesso errore usando --tab-with-profile = Default
Manuel

@Manuel L'altra possibilità è che i comandi target non siano nel tuo $PATH; specifica la posizione di sporke gli altri con un percorso assoluto.

Il comando che sto usando è gnome-terminal --tab --title = "rails s" -e "rails s" --tab-with-profile = Default --title = "spork" -e "spork" - tab-with-profile = Predefinito --title = "autotest" -e "autotest" (copia / incolla dalla tua risposta). A proposito di $ PATH, se questo è il problema, allora perché funziona su una scheda aperta tramite il menu?
Manuel,

@Manuel Come dici nella tua domanda, devi andare alla "cartella dell'app" ed eseguirli da lì, il che significa che non sono presenti $PATH. Il metodo nella risposta è quello che uso per avviare tutti i programmi della riga di comando installati nel repository in diverse schede nella stessa gnome-terminalfinestra e funziona sempre, poiché gli altri programmi sono in $ PATH.

0

gnome-terminal --tab -- sh -c "python3 'test.py' ; bash"

questo codice apre una nuova scheda nel terminale che esegue uno script Python e quando è finita, questa nuova scheda non si chiude, perché ho aggiunto 'bash' alla fine di questo codice ...

se lo vuoi più volte, mettilo in un ciclo while nel tuo script bash

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.