¿Cómo abro una ventana de terminal y ejecuto un comando después de que se haya abierto el shell?

¿Cómo abro una ventana de terminal y ejecuto un comando después de que se haya abierto el shell?

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.txtpredeterminado, sino el del archivo predeterminado .bash_history. Pensé que, dado que después del history -rcomando que estoy ejecutando bashy que genera el .bashrcarchivo, tal vez .bashrcesté haciendo algo que afecte el historial que cargué.

En base a eso, probé la rcfileopció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 historycomando a, rcfilemuestra que history.txtse cargó el historial, por lo quealgo después rcfileestá sobrescribiendo el historial que cargo.

También descubrí que si yodesarmar la HISTFILEvariablecon export HISTFILE=''al final del rcfile,el historial de history.txtno se sobrescribey funciona. Sin embargo, no quiero desarmarlo HISTFILEporque quiero que se guarde el historial .bash_historycuando uso la terminal recién abierta.

Finalmente, encontré la -oopción en bash, así que intenté hacer lo que quiero con eso. Cambié mi rcfilea:

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 bashwith +o historyevitara que history.txtse sobrescribiera el historial, mientras que el set -o historycomando en rcfilereactivaría el historial de bash. Sin embargo, esto tampoco funciona según lo previsto, ya que el historial es el de history.txtpero luego no hay más registros de historial y tengo que ingresar manualmente set -o historypara 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 rcfilese 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_COMMANDvariable y el rcfile.txtarchivo mencionado en la pregunta. Puedes ejecutar el comando

gnome-terminal -e "bash --rcfile rcfile.txt"

Donde el contenido de rcfile.txtes 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 .bashrcsi existe para mantener cualquier otra configuración del terminal. Luego, define una función que se ejecutará una vez al llamar al archivo PROMPT_COMMANDusado en bash, luego se desactivará y restaurará el archivo original PROMPT_COMMAND.

información relacionada