
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.txt
que está no arquivo padrão, .bash_history
. Pensei que depois do history -r
comando que estou executando bash
, e que origina o .bashrc
arquivo, talvez .bashrc
esteja fazendo algo que afete o histórico que carreguei.
Com base nisso, tentei a rcfile
opçã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 history
comando ao rcfile
ele mostra que o histórico history.txt
foi carregado, entãoalgo depois rcfile
está sobrescrevendo o histórico que carrego.
Também descobri que se eudesmarcar a HISTFILE
variávelcom export HISTFILE=''
no final do rcfile
,o histórico de history.txt
não foi sobrescritoe funciona. No entanto, não quero cancelar a configuração HISTFILE
porque quero que o histórico seja salvo .bash_history
quando eu usar o terminal recém-aberto.
Finalmente encontrei a -o
opção no bash, então tentei fazer o que queria com ela. Eu mudei meu rcfile
para:
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 bash
with +o history
impediria que o histórico history.txt
fosse sobrescrito, enquanto o set -o history
comando no rcfile
reativaria o histórico do bash. No entanto, isso também não funciona como esperado, pois o histórico é o mesmo, history.txt
mas não há mais registro do histórico e tenho que inserir manualmente set -o history
para 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_COMMAND
variável e o rcfile.txt
arquivo 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, .bashrc
se 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_COMMAND
usado no bash, depois se desativará e restaurará o arquivo PROMPT_COMMAND
.