2009-07-27 41 views
97

Cuando escriboAbrir una nueva pestaña en gnome-terminal mediante línea de comandos

gnome-terminal --tab

en la terminal, espero que se abra una nueva pestaña en la misma ventana de terminal. Pero abre una nueva ventana en su lugar.

descubrí que su intención es abrir una nueva pestaña en una ventana nueva, es decir, si escribo

gnome-terminal --tab --tab

se abrirá una nueva ventana con dos pestañas.

Entonces, la pregunta es, ¿cómo puedo abrir una nueva pestaña en la ventana actual usando un comando en gnome-terminal?

Estoy usando Ubuntu 9.04 x64.

+4

si está escribiendo el gnome-terminal de todos modos, ¿por qué no puede usted sólo tiene que pulsar Ctrl + Shift + T para abrir una nueva pestaña;) – rasjani

+10

Y cómo se supone que voy a presionar ' Ctrl + Shift + T' cuando el comando se ejecuta desde un archivo de script? (¡Escuché que algo llamado D-Bus puede hacer eso!) –

+15

Cada vez que enciendo mi PC, necesito abrir algunas pestañas en mi terminal gnome. Y _automatifying_ eso me hará sentir un poco más geek. (Como dicen) La pereza es una característica del programador. –

Respuesta

57
#!/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 

Este auto determinará el terminal correspondiente y abre la pestaña correspondiente.

+3

Gracias, funciona bien. En forma correcta: 'WID = xprop -root | grep "_NET_ACTIVE_WINDOW (WINDOW)" | awk '{print $ 5}'; xdotool windowfocus $ WID; xdotool key ctrl + shift + t $ WID' –

+0

si esto funciona que pondrá fin a tantos meses de frustración. Muchas gracias. –

+0

xdotool, gran recurso. Estaba buscando el equivalente de AutoIt de Windows, pero para Linux. – Cerin

0

No tengo el gnome-terminal instalado, pero debería poder hacer esto usando una llamada DBUS en la línea de comandos usando dbus-send.

58

También puede hacer que cada pestaña ejecute un comando set.

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

Aparece 'Hubo un error al crear el proceso hijo para este terminal' en respuesta a 'gnome -terminal --tab -e" cd/tmp "' – Hedgehog

+3

@ Hedgehog, tengo una forma de hacerlo: 'gnome-terminal --tab --working-directory ="/home/user/X/Y/"'. No sé por qué, pero '" ~/X/Y/"' no funcionó. – glarrain

+1

Tengo problemas con mis comandos, si solo uso --tab funciona, pero si uso --tab -e "my_bash_shorcut" no funciona. ¿Sabes por qué? –

0

Considere utilizar Roxterm en su lugar.

roxterm --tab 

abre una pestaña en la ventana actual.

-2

Para cualquier persona que busque una solución que no utiliza la línea de comandos: Ctrl + Shift + t

+5

Están pidiendo línea de comando., para automatizar las cosas. Estos atajos raramente ayudan. –

+0

que era exactamente lo que estaba buscando. La pregunta en el título no se limita a 'soluciones automáticas' @EAGER_STUDENT y, para ser sincero, me resulta difícil encontrar un caso de uso en el que necesite una GUI automatizada. Eso es como hacer una cirugía a corazón abierto a través de la columna vertebral. –

+3

@SteffenWinkler Me alegra que la solución te haya ayudado. Pero como la pregunta decía 'usar línea de comando', asumí que debía usar algunos comandos automatizados, algo así como las respuestas más votadas ... De todos modos, la respuesta misma aclara 'Para cualquiera que busque una solución que no use la línea de comando' ... Felicitaciones a la respuesta ... Además, 'me resulta difícil encontrar un caso de uso en el que necesite una GUI automatizada.' Siempre necesito 5 pestañas para abrir al inicio. En ese caso, sería útil. Pero en ese caso también podemos utilizar el atajo para automatizar de todos modos;) –

3

Un poco más elaborada versión (para usar desde otra ventana):

#!/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 "[email protected]" 
xdotool key Return 

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

# vim:ai 
# EOF # 
-2

Para pestañas múltiples abiertas en la misma ventana de terminal puede ir con la siguiente solución.

Ejemplo script:

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 
+0

Suena como esta es una respuesta muy centrada en OSX cuando la pregunta es claramente sobre la terminal (gnome) en Linux. 'osascript' es OSX (Apple) – nhed

2

I conocer la forma más sencilla:

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

lo uso tmux en lugar de utilizar directamente terminal. Entonces, lo que quiero es realmente un simple y simple comando/shell para construir el desarrollo env con varias ventanas tmux. El código shell es la siguiente:

#!/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 
+0

Estas comillas' 'command 1'' funcionan mejor que las comillas dobles que solo funcionan para mí cuando también especifico' -working-directory = "/ some/path /" ' –

+0

Estas citas' 'command 1' 'funciona mejor que las comillas dobles que solo funcionan para mí cuando también especifico '-working-directory ="/some/path/"' –

Cuestiones relacionadas