Abra una nueva pestaña en gnome-terminal usando la línea de comando [cerrado]

122

Estoy usando Ubuntu 9.04 x64 y cuando escribo:

gnome-terminal --tab

En la terminal, espero que 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 nueva ventana, 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?

Vikrant Chaudhary
fuente
44
si de todos modos está escribiendo gnome-terminal, ¿por qué no puede presionar ctrl + shift + t para abrir una nueva pestaña;)
rasjani
13
¿Y cómo se supone que debo presionar Ctrl+Shift+Tcuando el comando se ejecuta desde un archivo de script? (¡Escuché que algo llamado D-Bus puede hacer eso sin embargo!)
Vikrant Chaudhary
19
Cada vez que inicio mi PC, necesito abrir algunas pestañas en mi terminal gnome. Y automatizar eso me hará sentir un poco más geek. (Como dicen) La pereza es una característica del programador.
Vikrant Chaudhary
@VikrantChaudhary threevirtues.com :-)
jpaugh
Stack Overflow es un sitio para preguntas de programación y desarrollo. Esta pregunta parece estar fuera de tema porque no se trata de programación o desarrollo. Consulte los temas sobre los que puedo preguntar aquí en el Centro de ayuda. Quizás Super User o Unix & Linux Stack Exchange sería un mejor lugar para preguntar.
jww

Respuestas:

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

Esto determinará automáticamente el terminal correspondiente y abrirá la pestaña en consecuencia.

utkarsh dubey
fuente
3
Gracias, funciona bien. En forma adecuada -WID= xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}'; xdotool windowfocus $WID; xdotool key ctrl+shift+t $WID
Vikrant Chaudhary
66
Gracias por la solucion. Sin embargo, no está claro para mí cómo puedo ejecutar diferentes comandos en diferentes pestañas. No importa dónde agregue los comandos, todos se ejecutan en la primera pestaña. ¿Puedes incluir una solución para esto?
Calin
10
@Calin utiliza sleep 1; xdotool type --delay 1 --clearmodifiers "your Command"; xdotool key Return;para ejecutar un comando.
user13107
2
¿Por qué el bit WID y windowfocus? ¿La ventana ya no estará enfocada?
Chris Morgan
1
¿Dónde coloco este script?
Dawoodjee
69

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

gnome-terminal --tab -e "tail -f somefile" --tab -e "some_other_command"
Chase Seibert
fuente
11
Aparece el mensaje "Hubo un error al crear el proceso secundario para este terminal" en respuesta agnome-terminal --tab -e "cd /tmp"
Hedgehog el
3
@Hedgehog, tengo una manera para que: 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é?
Adrian Matteo
@AdrianMatteo Un poco tarde, pero creo que lo he descubierto: si crea dos archivos con galimatías y luego ejecuta este comando gnome-terminal --tab -e "tail -f file_a" --tab -e "tail -f file_b", el terminal gnome se abrirá con dos pestañas donde cada pestaña tendrá el contenido del archivo respectivo, pero cerrará momento en que envías ^ C. Esto le muestra por qué no funciona, pero no sé cómo solucionarlo.
IDDQD
8

Encontré la forma más simple:

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

Yo uso en tmuxlugar de usar la terminal directamente. Entonces, lo que quiero es realmente un comando / archivo de shell simple y simple para construir el desarrollo envcon varias tmuxventanas. El código de shell es el 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
jaogoy
fuente
Estas citas 'command 1'funcionan mejor que las dobles, que solo funcionan para mí cuando también especifico--working-directory="/some/path/"
Barry Staes
4

Una versión un poco más elaborada (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 "$@"
xdotool key Return

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

# vim:ai
# EOF #
jno
fuente
2

Por si acaso, quieres abrir

  • una nueva ventana
  • con dos pestañas
  • y ejecutar el comando allí
  • y que permanezcan abiertos ...

aqui tienes:

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 mismo por mate-terminalcierto)

Frank Nocke
fuente
Funciona igual para xfce4-terminalBTW. ¿Cuál de estos comandos es realmente responsable del punto and having them stay open...? Estoy preguntando porque esto no se menciona en la página de manual al menos paraxfce4-terminal
Jankapunkt
1

Para reunir una serie de puntos diferentes anteriores, aquí hay un script que ejecutará todos los argumentos pasados ​​al 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;

Luego hazlo ejecutable: chmod +x new_tab.sh

Ahora puedes usarlo para ejecutar lo que quieras en una nueva pestaña: ./new_tab.sh "watch ls -l"

NeoGeek
fuente
0

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

Mike McQuaid
fuente
0

Considere usar Roxterm en su lugar.

roxterm --tab

abre una pestaña en la ventana actual.

usuario25643
fuente
0

Para cualquiera que busque una solución que no use la línea de comando: ctrl + shift + t

Jemini
fuente
10
Piden línea de comando., Para automatizar las cosas. Estos atajos rara vez ayudan.
Muthu Ganapathy Nathan
eso era exactamente lo que estaba buscando. La pregunta en el título no se limita a 'soluciones automatizadas' @EAGER_STUDENT y, para ser honesto, me resulta difícil encontrar un caso de uso donde necesito una GUI automatizada. Eso es como hacer una cirugía a corazón abierto a través de la columna vertebral.
Steffen Winkler
66
@SteffenWinkler Me alegra que la solución te haya ayudado. Pero dado que la pregunta decía 'usando la línea de comando', supuse que usaba algunos comandos automáticos, algo así como las respuestas con alta votación ... De todos modos, la respuesta en sí 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 necesito 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 usar el atajo para automatizar de todos modos;)
Muthu Ganapathy Nathan
2
Ejemplo donde necesito la apertura automática de pestañas; Estoy automatizando los scripts de inicio en un robot, y quiero abrir pestañas para ejecutar comandos para que cuando los procesos se bloqueen (como eventualmente lo hacen) pueda ingresar desde mi computadora portátil y echar un vistazo a la salida de registro en las consolas sin excavar a través de los directorios del archivo de registro.
WillC
-2

Para abrir varias pestañas en la misma ventana de terminal, puede ir con la siguiente solución.

Script de ejemplo:

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 
Pallavi Varne
fuente
1
Parece que esta es una respuesta muy centrada en OSX cuando la pregunta es claramente sobre el terminal (gnome) en Linux. osascriptes OSX (Apple)
nhed
@nhed: Gracias, eso responde a mi ¿qué demonios es eso? respuesta a esta respuesta. Pallavi: Incluso si la pregunta era sobre Mac, codificar tu propia ruta de inicio no hace que tu respuesta sea muy útil. Le sugiero que use la $HOMEvariable de entorno, o el equivalente de OSX si es diferente.
Michael Scheper