Como eu abro uma janela de terminal e executo um comando depois que o shell é aberto?

4

Eu gostaria de ter um comando ou script que abra uma nova janela do gnome-terminal com o bash e carregue um arquivo de histórico e permaneça aberto .

Eu procurei como abrir um terminal e executar um comando sem ele fechar, e as respostas que encontrei são essencialmente resumidas em esse stackoverflow responder .

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 exibido na nova janela não é o que está em history.txt , mas o que está no arquivo padrão, .bash_history . Eu pensei desde que após o comando history -r estou executando bash , e que origina o arquivo .bashrc , talvez .bashrc esteja fazendo algo que afeta o histórico que eu carreguei.

Com base nisso, tentei a opção rcfile na resposta vinculada acima, para que eu possa incluir comandos após .bashrc , resultando no seguinte rcfile :

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

No entanto, quando eu executo o seguinte comando:

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

O histórico no novo terminal ainda é o de .bash_history . Se eu adicionar o comando history ao rcfile ele mostrará que o histórico de history.txt foi carregado, então algo após o rcfile estar sobrescrevendo o histórico que carrego .

Também descobri que, se eu cancelar a variável HISTFILE com export HISTFILE='' no final de rcfile , o histórico de history.txt não será sobrescrito e funciona. No entanto, eu não quero desmarcar HISTFILE porque eu quero que o histórico seja salvo em .bash_history quando eu uso o terminal recém-aberto.

Finalmente, encontrei a opção -o no bash, então tentei fazer o que quero com isso. Eu mudei meu rcfile para:

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

e executou o seguinte comando:

bash --rcfile rcfile.txt +o history

Eu esperava que a execução de bash com +o history impediria que o histórico de history.txt fosse sobrescrito, enquanto o comando set -o history no rcfile reativaria o histórico bash. No entanto, isso também não funciona como esperado, já que o histórico é o de history.txt , mas não há mais log de histórico e eu tenho que inserir manualmente set -o history para que ele funcione.

Então, basicamente, tudo que tentei me traz de volta à mesma pergunta: como eu abro o novo terminal com bash e então executo um comando , como se um usuário estavam entrando?

Além disso, eu gostaria de ter um melhor entendimento de o que está acontecendo depois que o rcfile for executado , pois não consegui encontrar nenhum outro arquivo relevante que estava sendo originado. E existe uma maneira de desativar esse comportamento a partir da linha de comando ?

    
por M. Andres 24.10.2016 / 22:16

1 resposta

1

Consegui encontrar uma solução alternativa usando a variável PROMPT_COMMAND e o arquivo rcfile.txt 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 isto faz é originar o padrão .bashrc , se existir, para manter quaisquer outras configurações de terminal. Em seguida, ele define uma função que será executada uma vez ao chamar o PROMPT_COMMAND usado no bash, e então irá se desfazer e restaurar o original PROMPT_COMMAND .

    
por 29.10.2016 / 17:33