Para iniciar mi entorno de desarrollo, escribí un pequeño guión. Una parte es abrir una terminal de gnome con varias pestañas donde automáticamente se deben ejecutar algunos comandos. Algunos de esos comandos dependen de un .bashrc ya ejecutado. Pero al usar
gnome-terminal --tab -e "comando" --tab --tab
el comando se ejecuta antes de ejecutar .bashrc. ¿Existe la posibilidad de hacer que un gnome-terminal -e automatizado se comporte como uno usado manualmente? (incluso comandos como "cd /foo/bar" no funcionan con gnome-terminal -e)
Respuesta1
Una vez que gnome-terminal ha iniciado bash, queda fuera del circuito en lo que respecta a la ejecución de comandos: solo administra la entrada y la salida. Por lo tanto, necesitará la cooperación de bash para ejecutar algo después de que ~/.bashrc
se haya cargado.
Primero, en muchos casos, no es necesario ejecutar comandos después de ~/.bashrc
. Por ejemplo, abrir una terminal en un directorio particular se puede hacer simplemente con cd /foo/bar && gnome-terminal
. Puede configurar variables de entorno de forma similar: VAR=value gnome-terminal
. (Si ~/.bashrc
anula las variables de entorno, lo está haciendo mal:las definiciones de variables de entorno pertenecen a~/.profile
)
Para ejecutar comandos en la terminal, pero antes ~/.bashrc
, puedes hacer
gnome-terminal -x sh -c 'command1; command2; exec bash'
Si desea utilizar varias pestañas, debe utilizar -e
en lugar de -x
. Gnome-terminal divide inútilmente el argumento de -e
en espacios en lugar de ejecutarlo a través de un shell. No obstante, puede escribir un comando de shell si se asegura de no incluir espacios en él. Sin embargo, al menos con gnome-terminal 2.26, puedes usar tabulaciones (reemplazarlas <TAB>
por un carácter de tabulación literal):
gnome-terminal -e 'sh -c command1;command2;exec<TAB>bash'
gnome-terminal --tab -e 'sh -c command1;<TAB>exec<TAB>bash' \
--tab -e 'sh -c command2;<TAB>exec<TAB>bash'
Si necesita ejecutar comandos después ~/.bashrc
, hagaélejecutar los comandos. Por ejemplo, incluya el siguiente código al final de ~/.bashrc
:
eval "$BASH_POST_RC"
Luego, para ejecutar un código después (en realidad, al final de) tu bashrc:
gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'
o (menos pesado en las citas)
BASH_POST_RC='command1; command2' gnome-terminal
Aunque no recomiendo especialmente hacerlo de esta manera, quizás te interesen las técnicas mencionadas en ¿Cómo iniciar una terminal con cierto texto ya ingresado en la línea de comandos?.
Respuesta2
Cuando use la -e
opción, gnome-terminal
ejecutará ese comando sin iniciar un nuevo shell (incluso puede ejecutar algo como:) gnome-terminal -e gedit
, por lo que si desea ejecutar un comando en el bash
shell en una nueva terminal/pestaña, debe hacer algo como esto:
gnome-terminal -x bash -c "command"
Pero tenga en cuenta que cuando "command"
finalice, la terminal/pestaña también finalizará.