Una vez que gnome-terminal ha comenzado bash, está fuera del ciclo en lo que respecta a la ejecución del comando: 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 ~/.bashrc
. Por ejemplo, simplemente se puede abrir una terminal en un directorio particular cd /foo/bar && gnome-terminal
. Puede establecer las variables de entorno de una manera similar: VAR=value gnome-terminal
. (Si ~/.bashrc
anula las variables de entorno, lo está haciendo mal: las definiciones de variables de entorno pertenecen~/.profile
)
Para ejecutar comandos en la terminal, pero antes ~/.bashrc
, puedes hacer
gnome-terminal -x sh -c 'command1; command2; exec bash'
Si desea usar varias pestañas, debe usarlas en -e
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, puede usar pestañas (reemplazar <TAB>
por un carácter de pestaña 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 que ejecute 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 (realmente, al final de) su bashrc:
gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'
o (menos pesado en la cita)
BASH_POST_RC='command1; command2' gnome-terminal
Aunque no recomiendo hacerlo de esta manera, es posible que le interesen las técnicas mencionadas en
Cómo iniciar un terminal con cierto texto ya ingresado en la línea de comandos. .
gnome-terminal --geometry=198x44 --working-directory=/home/username/Workspace/project_name --tab --title server -e 'zsh -c "export BASH_POST_RC=\"rails server\"; exec zsh"' --tab --title console -e 'zsh -c "export BASH_POST_RC=\"rails console\"; exec zsh"'
gnome-terminal -e
no invoca un shell en absoluto. Si ejecutagnome-terminal -e 'sleep 9'
, eso ejecuta el comandosleep
con el argumento9
, y no está involucrado ningún shell. Si ejecutagnome-terminal -e 'sleep 9;bash'
, el terminal se abre y cierra inmediatamente, porque sesleep
queja de que9;bash
no es un intervalo de tiempo válido. Puedes observar lo que está sucediendostrace -f -eexecve gnome-terminal -e …
Cuando usa la
-e
opcióngnome-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 elbash
shell en una nueva terminal / pestaña, debe hacer algo como esto:Pero tenga en cuenta que cuando
"command"
finalice el terminal / pestaña también finalizará.fuente
gnome-terminal -x bash -c "command"
(-e
espera un solo argumento). Y es bastante simple ejecutar un shell despuéscommand
, al menos mientras comience una sola pestaña: vea mi respuesta .gnome-terminal -x "bash" -c "command"
trabajó para mi. Observe las citas en el valor -x arg.# Option “-x” is deprecated and might be removed in a later version of gnome-terminal.
`-x
y-e
optons están en desuso?~/.bashrc
antes de ejecutar el comando, como lo solicitó originalmente el OP.