Como abro uma janela de terminal e executo um comando após a abertura do shell?

Como abro uma janela de terminal e executo um comando após a abertura do shell?

Eu gostaria de ter um comando ou script queabre uma nova janela do gnome-terminal com bash e carrega um arquivo de histórico e permanece aberto.

Procurei como abrir um terminal e executar um comando sem ele fechar, e as respostas que encontrei estão essencialmente resumidas emesta resposta stackoverflow.

Com base nesses métodos, tentei executar o seguinte comando:

gnome-terminal -e "bash -c 'history -r ~/history.txt; exec $SHELL'"

No entanto, o histórico que aparece na nova janela não é aquele history.txtque está no arquivo padrão, .bash_history. Pensei que depois do history -rcomando que estou executando bash, e que origina o .bashrcarquivo, talvez .bashrcesteja fazendo algo que afete o histórico que carreguei.

Com base nisso, tentei a rcfileopção na resposta do link acima, para poder incluir comandos depois .bashrc, resultando no seguinte rcfile:

FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/history.txt

Porém, quando executo o seguinte comando:

gnome-terminal -e "bash --rcfile rcfile"

A história do novo terminal ainda é a de .bash_history. Se eu adicionar o historycomando ao rcfileele mostra que o histórico history.txtfoi carregado, entãoalgo depois rcfileestá sobrescrevendo o histórico que carrego.

Também descobri que se eudesmarcar a HISTFILEvariávelcom export HISTFILE=''no final do rcfile,o histórico de history.txtnão foi sobrescritoe funciona. No entanto, não quero cancelar a configuração HISTFILEporque quero que o histórico seja salvo .bash_historyquando eu usar o terminal recém-aberto.

Finalmente encontrei a -oopção no bash, então tentei fazer o que queria com ela. Eu mudei meu rcfilepara:

FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/saved/history.txt
set -o history

e executei o seguinte comando:

bash --rcfile rcfile.txt +o history

Eu esperava que executar bashwith +o historyimpediria que o histórico history.txtfosse sobrescrito, enquanto o set -o historycomando no rcfilereativaria o histórico do bash. No entanto, isso também não funciona como esperado, pois o histórico é o mesmo, history.txtmas não há mais registro do histórico e tenho que inserir manualmente set -o historypara que funcione.

Então, basicamente, tudo que tentei me traz de volta à mesma pergunta:como eu abro o novo terminal com bash eentãoexecutar um comando, como se um usuário estivesse entrando nele?

Além disso, gostaria de entender melhoro que está acontecendo depois que o rcfileé executado, pois não consegui encontrar nenhum outro arquivo relevante que estava sendo obtido. Eexiste uma maneira de desabilitar esse comportamento na linha de comando?

Responder1

Consegui encontrar uma solução alternativa usando a PROMPT_COMMANDvariável e o rcfile.txtarquivo mencionado na pergunta. Você pode executar o comando

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

Onde o conteúdo de rcfile.txté o seguinte:

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\'"

O que isso faz é fornecer o padrão, .bashrcse existir, para manter quaisquer outras configurações do terminal. Em seguida, ele define uma função que será executada uma vez ao chamar o PROMPT_COMMANDusado no bash, depois se desativará e restaurará o arquivo PROMPT_COMMAND.

informação relacionada