Abra la terminal gnome mediante programación y ejecute comandos después de ejecutar bashrc

Abra la terminal gnome mediante programación y ejecute comandos después de ejecutar bashrc

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 ~/.bashrcse 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 ~/.bashrcanula 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 -een lugar de -x. Gnome-terminal divide inútilmente el argumento de -een 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 -eopción, gnome-terminalejecutará 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 bashshell 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á.

información relacionada