Abrir múltiples pestañas con gnome-terminal

16

Estoy tratando de crear un comando que abra 3 servicios desde la pila de Rails, rails s, spork y autotest. Puedo ejecutar estos comandos individualmente abriendo 3 terminales, yendo a la carpeta de la aplicación y ejecutándolos. Incluso puedo abrir 3 pestañas nuevas y ejecutar los comandos en cada una.

El problema es que fallan cuando intento abrir las pestañas a través de gnome-terminal de la siguiente manera:

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

Error (para spork y autotest):

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

Sorprendentemente funciona para 'rails s' (la pestaña muestra el servidor en ejecución).

¿Algunas ideas?

Manuel
fuente

Respuestas:

9

A continuación se muestra una respuesta de stackoverflow.com

  1. Agregue un eval "$BASH_POST_RC"al final de su .bashrc

  2. Establezca la BASH_POST_RCvariable de entorno para cada pestaña en el comando que desea ejecutar, por ejemplo: 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"'

verde
fuente
15

Invocar gnome-terminaltres veces y unir los comandos con && no funcionará, y las pestañas no aparecerán en el mismo terminal, y de hecho, tendrá que salir del primer terminal para que aparezca el siguiente.

La forma de asegurarse de que todas las pestañas se abran en una instancia de gnome-terminaltodas al mismo tiempo es usar el --tab-with-profile=PROFILENAMEinterruptor. En el siguiente comando, puede dejar el primer comando como gnome-terminal --tabsi fuera la primera ventana que se generará; ahora todo lo que necesita saber es qué perfil está utilizando y puede usar --tab-with-profile=YourProfilepara invocar los otros comandos y todos aparecerán a la vez en el terminal original abierto.

Aquí está tu comando modificado:

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"

(Para futuros lectores: sustituya los nombres de programa dados después -epara probar la línea de comando que se muestra aquí; recuerde que sus objetivos -edeben estar instalados y dentro $PATH; para cosas que no están en $PATHuso, una ruta absoluta como, por ejemplo, /opt/mike/program)

Recuerde especificar el perfil real que está utilizando para los --tab-with-profileconmutadores. La primera invocación de gnome-terminalmust use --taby todo lo demás --tab-with-profile. Con este método debería ser posible abrir una gran cantidad de pestañas, todo en la misma instancia de gnome-terminal.

Encuentra el perfil que estás usando actualmente haciendo clic derecho gnome-terminaly mira los perfiles y habrá un marcador en el que estás usando actualmente:

ingrese la descripción de la imagen aquí

Vaya a Preferencias de perfil para obtener más información y verificar el nombre del perfil.

Para obtener más información, consulte man gnome-terminallas páginas de manual de Ubuntu en línea .


Nota :

Si tiene problemas para iniciar sus programas gnome-terminal, agregue la ubicación $PATHo cree un enlace simbólico y colóquelo en una $PATHubicación, o (lo que fue muy útil aquí): cree un script de envoltura bash simple y llame a eso en la gnome-terminallínea de comando anterior. (Debe llamarlo con una ruta absoluta: es decir, /location/of/scripty no solo con el nombre).

Como ejemplo:

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

Luego nombra el script, hazlo ejecutable y llámalo en la gnome-terminallínea de comando anterior. Haga esto para todos los programas no repositorios que sean problemáticos.

postre
fuente
¿Cómo conozco el perfil? (Intenté con Default, mi nombre de usuario y ~ / .profile)
Manuel
Dice Predeterminado pero obtengo el mismo error usando --tab-with-profile = Predeterminado
Manuel
@Manuel La otra posibilidad es que los comandos de destino no estén en tu $PATH; especifica la ubicación sporky los demás con una ruta absoluta.
El comando que estoy usando es gnome-terminal --tab --title = "rails s" -e "rails s" --tab-with-profile = Predeterminado --title = "spork" -e "spork" - tab-with-profile = Predeterminado --title = "autotest" -e "autotest" (copiar / pegar de su respuesta). Acerca de $ PATH, si este es el problema, ¿por qué funciona en una pestaña abierta a través del menú?
Manuel
@Manuel Como dices en tu pregunta, tienes que ir a "la carpeta de la aplicación" y ejecutarlos desde allí, lo que significa que no están $PATH. El método en la respuesta es el que uso para iniciar todos los programas de línea de comandos instalados en el repositorio en diferentes pestañas en la misma gnome-terminalventana, y siempre funciona, ya que esos otros programas están en $ PATH.
0

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

este código abre una nueva pestaña en la terminal que ejecuta un script de Python y cuando termina, esta nueva pestaña no se cerrará, porque agregué 'bash' al final de este código ...

si lo quieres varias veces, ponlo en un ciclo while en tu script bash

Joao Vitor Deon
fuente