Apri una nuova scheda in gnome-terminal utilizzando la riga di comando [chiuso]


122

Sto usando Ubuntu 9.04 x64 e quando scrivo:

gnome-terminal --tab

Al terminale, mi aspetto che apra una nuova scheda nella stessa finestra del terminale. Ma apre invece una nuova finestra.

Ho scoperto che la sua intenzione è quella di aprire una nuova scheda in una nuova finestra, ovvero se scrivo:

gnome-terminal --tab --tab

Si aprirà una nuova finestra con due schede.

Quindi, la domanda è: come posso aprire una nuova scheda nella finestra corrente utilizzando un comando in gnome-terminal?


4
se stai scrivendo lo gnome-terminal comunque, perché non puoi semplicemente premere ctrl + maiusc + t per aprire una nuova scheda;)
rasjani

13
E come dovrei premere Ctrl+Shift+Tquando il comando viene eseguito da un file di script? (Ho sentito qualcosa chiamato D-Bus può farlo però)!
Vikrant Chaudhary

19
Ogni volta che avvio il mio PC, devo aprire alcune schede nel mio gnome-terminal. E automatizzare questo mi farà sentire un po 'più geek. (Come si suol dire) La pigrizia è una caratteristica del programmatore.
Vikrant Chaudhary

@VikrantChaudhary threevirtues.com :-)
jpaugh

Stack Overflow è un sito per domande di programmazione e sviluppo. Questa domanda sembra essere fuori tema perché non si tratta di programmazione o sviluppo. Vedi Quali argomenti posso chiedere qui nel Centro assistenza. Forse Super User o Unix e Linux Stack Exchange sarebbero un posto migliore per chiedere.
jww

Risposte:


70
#!/bin/sh

WID=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}')
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID

Questo determinerà automaticamente il terminale corrispondente e aprirà la scheda di conseguenza.


3
Grazie, funziona bene. Nella forma corretta -WID= xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}'; xdotool windowfocus $WID; xdotool key ctrl+shift+t $WID
Vikrant Chaudhary

6
Grazie per la soluzione. Tuttavia, non mi è chiaro come eseguire comandi diversi in schede diverse. Non importa dove aggiungo i comandi, vengono tutti eseguiti nella prima scheda. Puoi includere una soluzione per questo?
Calin

10
@Calin usa sleep 1; xdotool type --delay 1 --clearmodifiers "your Command"; xdotool key Return;per eseguire un comando.
user13107

2
Perché il bit WID e windowfocus? La finestra non sarà già focalizzata?
Chris Morgan

1
Dove posiziono questo script?
Dawoodjee

69

Puoi anche fare in modo che ogni scheda esegua un comando set.

gnome-terminal --tab -e "tail -f somefile" --tab -e "some_other_command"

11
Ottengo "Si è verificato un errore durante la creazione del processo figlio per questo terminale" in risposta agnome-terminal --tab -e "cd /tmp"
Hedgehog

3
@Hedgehog, ho un modo per questo: gnome-terminal --tab --working-directory="/home/user/X/Y/". Non so perché, ma "~/X/Y/"non ha funzionato.
glarrain

1
Ho problemi con i miei comandi, se uso solo --tab funziona ma se uso --tab -e "my_bash_shorcut" non funziona. Sai perché?
Adrian Matteo

@AdrianMatteo Un po 'in ritardo, ma penso di averlo capito: se crei due file con incomprensibile e poi esegui questo comando gnome-terminal --tab -e "tail -f file_a" --tab -e "tail -f file_b", il terminale gnome si aprirà con due schede in cui ogni scheda avrà il rispettivo contenuto di file, ma chiuderà il momento dell'invio ^ C. Questo ti mostra perché non funziona, ma non so come rimediare.
IDDQD


8

Ho trovato il modo più semplice:

gnome-terminal --tab -e 'command 1' --tab -e 'command 2'

Uso tmuxinvece di usare direttamente il terminale. Quindi quello che voglio è davvero un unico e semplice file di comando / shell per costruire lo sviluppo envcon diverse tmuxfinestre. Il codice della shell è il seguente:

#!/bin/bash
tabs="adb ana repo"
gen_params() {

    local params=""
    for tab in ${tabs}
    do  
        params="${params} --tab -e 'tmux -u attach-session -t ${tab}'"
    done
    echo "${params}"
}
cmd="gnome-terminal $(gen_params)"
eval $cmd

Queste citazioni 'command 1'funzionano meglio delle virgolette doppie che funzionano solo per me quando specifico anche--working-directory="/some/path/"
Barry Staes

4

Versione un po 'più elaborata (da utilizzare da un'altra finestra):

#!/bin/bash

DELAY=3

TERM_PID=$(echo `ps -C gnome-terminal -o pid= | head -1`) # get first gnome-terminal's PID
WID=$(wmctrl -lp | awk -v pid=$TERM_PID '$3==pid{print $1;exit;}') # get window id

xdotool windowfocus $WID
xdotool key alt+t # my key map
xdotool sleep $DELAY # it may take a while to start new shell :(
xdotool type --delay 1 --clearmodifiers "$@"
xdotool key Return

wmctrl -i -a $WID # go to that window (WID is numeric)

# vim:ai
# EOF #

2

Per ogni evenienza, vuoi aprire

  • una nuova finestra
  • con due linguette
  • ed eseguire il comando lì dentro
  • e tenerli aperti ...

Ecco qui:

gnome-terminal --geometry=73x16+0+0 --window \
  --working-directory=/depot --title='A' --command="bash -c ls;bash" \
  --tab --working-directory=/depot/kn --title='B' --command="bash -c ls;bash"

(lo stesso per mate-terminalbtw.)


Funziona allo stesso modo per xfce4-terminalbtw. Quale di questi comandi è effettivamente responsabile del punto and having them stay open...? Te lo chiedo perché questo non è menzionato nella manpage almeno perxfce4-terminal
Jankapunkt

1

Per riunire una serie di punti diversi sopra, ecco uno script che eseguirà tutti gli argomenti passati allo script vim new_tab.sh:

#!/bin/bash
#
# Dependencies:
#   sudo apt install xdotool

WID=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}')
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID
sleep 1; xdotool type --delay 1 --clearmodifiers "$@"; xdotool key Return;

Quindi rendilo eseguibile: chmod +x new_tab.sh

Ora puoi usarlo per eseguire quello che desideri in una nuova scheda: ./new_tab.sh "watch ls -l"


0

Non ho installato gnome-terminal ma dovresti essere in grado di farlo usando una chiamata DBUS sulla riga di comando usando dbus-send .


0

Considera invece l'utilizzo di Roxterm.

roxterm --tab

apre una scheda nella finestra corrente.


0

Per chiunque cerchi una soluzione che non utilizzi la riga di comando: ctrl + maiusc + t


10
Chiedono la riga di comando., Per automatizzare le cose. Queste scorciatoie raramente aiutano.
Muthu Ganapathy Nathan

era esattamente quello che stavo cercando. La domanda nel titolo non si limita a "soluzioni automatizzate" @EAGER_STUDENT e, ad essere sincero, trovo difficile trovare un caso d'uso in cui ho bisogno di una GUI automatizzata. È come fare un intervento chirurgico a cuore aperto attraverso la colonna vertebrale.
Steffen Winkler

6
@SteffenWinkler Sono contento che la soluzione ti abbia aiutato. Ma dal momento che la domanda diceva "utilizzando la riga di comando", ho pensato di utilizzare alcuni comandi automatizzati, qualcosa come le risposte con il voto più alto ... Comunque la risposta stessa chiarisce "Per chiunque cerchi una soluzione che non utilizza la riga di comando" ... Complimenti per la risposta .... Inoltre, "Trovo difficile trovare un caso d'uso in cui ho bisogno di una GUI automatizzata." Dico sempre che ho bisogno di 5 schede da aprire all'avvio. In tal caso, sarebbe utile. Ma anche in questo caso possiamo usare la scorciatoia per automatizzare comunque;)
Muthu Ganapathy Nathan

2
Esempio in cui ho bisogno dell'apertura automatica delle schede; Sto automatizzando gli script di avvio su un robot e voglio aprire le schede per eseguire i comandi in modo che quando i processi si bloccano (come fanno tutti alla fine) posso ssh dal mio laptop e dare un'occhiata all'output del log sulle console senza scavare nelle directory dei file di registro.
WillC

-2

Per aprire più schede nella stessa finestra di terminale puoi andare con la seguente soluzione.

Script di esempio:

pwd='/Users/pallavi/Documents/containers/platform241/etisalatwallet/api-server-tomcat-7/bin'
pwdlog='/Users/pallavi/Documents/containers/platform241/etisalatwallet/api-server-tomcat-7/logs'
pwd1='/Users/pallavi/Documents/containers/platform241/etisalatwallet/core-server-jboss-7.2/bin'
logpwd1='/Users/pallavi/Documents/containers/platform241/etisalatwallet/core-server-jboss-7.2/standalone/log'

osascript -e "tell application \"Terminal\"" \

-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $pwd\" in front window" \
-e "do script \"./startup.sh\" in front window" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $pwdlog\" in front window" \
-e "do script \"tail -f catalina.out \" in front window" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $pwd1\" in front window" \
-e "do script \"./standalone.sh\" in front window" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $logpwd1\" in front window" \
-e "do script \"tail -f core.log \" in front window" \
-e "end tell"
> /dev/null 

1
Sembra che questa sia una risposta molto incentrata su OSX quando la domanda riguarda chiaramente il terminale (gnome) in Linux. osascriptè OSX (Apple)
nhed

@nhed: Grazie, questo mi risponde cosa diavolo è? risposta a questa risposta. Pallavi: Anche se la domanda riguardava il Mac, l'hardcoding del proprio percorso di casa non rende la risposta molto utile. Ti suggerisco di usare la $HOMEvariabile d'ambiente, o l'equivalente OSX se è diverso.
Michael Scheper
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.