
Me gustaría tener un comando o script queabre una nueva ventana de gnome-terminal con bash y carga un archivo de historial y permanece abierto.
Busqué cómo abrir una terminal y ejecutar un comando sin que se cierre, y las respuestas que encontré se resumen esencialmente enesta respuesta de desbordamiento de pila.
Según estos métodos, intenté ejecutar el siguiente comando:
gnome-terminal -e "bash -c 'history -r ~/history.txt; exec $SHELL'"
Sin embargo, el historial que aparece en la nueva ventana no es el del archivo history.txt
predeterminado, sino el del archivo predeterminado .bash_history
. Pensé que, dado que después del history -r
comando que estoy ejecutando bash
y que genera el .bashrc
archivo, tal vez .bashrc
esté haciendo algo que afecte el historial que cargué.
En base a eso, probé la rcfile
opción en la respuesta vinculada anteriormente, para poder incluir comandos después .bashrc
, lo que resultó en lo siguiente rcfile
:
FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/history.txt
Sin embargo, cuando ejecuto el siguiente comando:
gnome-terminal -e "bash --rcfile rcfile"
La historia en el nuevo terminal sigue siendo la de .bash_history
. Si agrego el history
comando a, rcfile
muestra que history.txt
se cargó el historial, por lo quealgo después rcfile
está sobrescribiendo el historial que cargo.
También descubrí que si yodesarmar la HISTFILE
variablecon export HISTFILE=''
al final del rcfile
,el historial de history.txt
no se sobrescribey funciona. Sin embargo, no quiero desarmarlo HISTFILE
porque quiero que se guarde el historial .bash_history
cuando uso la terminal recién abierta.
Finalmente, encontré la -o
opción en bash, así que intenté hacer lo que quiero con eso. Cambié mi rcfile
a:
FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/saved/history.txt
set -o history
y ejecutó el siguiente comando:
bash --rcfile rcfile.txt +o history
Esperaba que ejecutar bash
with +o history
evitara que history.txt
se sobrescribiera el historial, mientras que el set -o history
comando en rcfile
reactivaría el historial de bash. Sin embargo, esto tampoco funciona según lo previsto, ya que el historial es el de history.txt
pero luego no hay más registros de historial y tengo que ingresar manualmente set -o history
para que funcione.
Básicamente, todo lo que probé me lleva de nuevo a la misma pregunta:¿Cómo abro la nueva terminal con bash y?entoncesejecutar un comando, como si un usuario estuviera ingresando en él?
Además, me gustaría tener una mejor comprensión de¿Qué sucede después de que rcfile
se ejecuta?, ya que no pude encontrar ningún otro archivo relevante del que se estuviera obteniendo. Y¿Hay alguna manera de deshabilitar ese comportamiento desde la línea de comando??
Respuesta1
Logré encontrar una solución utilizando la PROMPT_COMMAND
variable y el rcfile.txt
archivo mencionado en la pregunta. Puedes ejecutar el comando
gnome-terminal -e "bash --rcfile rcfile.txt"
Donde el contenido de rcfile.txt
es el siguiente:
FILE=~/.bashrc && test -f $FILE && source $FILE
my_init_func() {
# Insert desired commands here. In my case, history -r history.txt
PROMPT_COMMAND=`echo $1`
eval $PROMPT_COMMAND
unset -f $FUNCNAME
}
PROMPT_COMMAND="my_init_func \'$PROMPT_COMMAND\'"
Lo que esto hace es generar el valor predeterminado .bashrc
si existe para mantener cualquier otra configuración del terminal. Luego, define una función que se ejecutará una vez al llamar al archivo PROMPT_COMMAND
usado en bash, luego se desactivará y restaurará el archivo original PROMPT_COMMAND
.