Injetar linhas para bash o histórico

9

Por padrão, o bash carrega linhas do ~/.bash_historyhistórico. É possível adicionar um arquivo personalizado para também ser carregado? Desejo injetar um arquivo contendo comandos que uso com freqüência e acessá-lo por meio da pesquisa interna.

rgtk
fonte
2
Normalmente as pessoas adicionar aliases para os comandos usados com frequência ...
HBruijn
Isso é ótimo. Mas esse não é o caso - eu uso aliases para comandos que eu uso constantemente, mas tenho muitos comandos que têm um grande número de argumentos que eu quero modificar com base nas circunstâncias.
Rgtk 28/05
4
Você precisaria agendar algum tipo de modificação de arquivo, que parece um tanto louca e pode não funcionar. Basta fazer seus longos comandos de um shell script que aceita argumentos e solte-o /usr/local/binou algo
Wesley
Se você os usa com frequência, eles não estariam no seu histórico?
Declarar funções em .bashrc?
Mark K Cowan

Respostas:

13

Eu mantenho isso simples com um alias h='history|grep'carregado no meu perfil do Bash.

Então, meu fluxo de trabalho é h command, por exemplo:h hpssa

#  h hpssa
  202  05-28-2015 11:54:33  hpssacli
  217  05-28-2015 11:54:33  hpssa -start
  225  05-28-2015 11:54:33  hpssacli -stop
  226  05-28-2015 11:54:33  hpssa -stop
  228  05-28-2015 11:54:33  hpssa -start

Se eu quiser executar " hpssa -stop", simplesmente digito!226


Esta é apenas a minha abordagem, mas talvez você possa modificar a forma como está recuperando itens do histórico. Eu não acho que faz sentido realmente injetar dados no arquivo de histórico.

ewwhite
fonte
bom truque, roubar esse
wim 28/05
Sugira que você queira dar uma olhada no que o Ctrl-R faz para pesquisar no seu histórico. Prepare-se para ter sua mente soprado ...
2
@CameronKerr Dê uma olhada na resposta logo abaixo desta ( serverfault.com/a/695115/120438 ). A desvantagem de usar Ctrl + R nesse caso específico é que ele fornece os comandos relevantes um de cada vez, enquanto o ewwhite é abordagem retorna uma lista de todos os comandos relevantes.
Jenny D
Embora este seja um ótimo truque, ele não responde à pergunta. Não entendo como essa é a resposta mais votada. Meu caso de uso é que tenho uma imagem de janela de encaixe que continua perdendo sua história quando a saio. Eu pensei que seria bom se eu pudesse passar um arquivo de histórico através da linha de comando paradocker run ...
kumarharsh
@kumar_harsh Difícil de agradar.
precisa saber é
7

Eu costumava confiar muito em Ctrl-R( reverse-search-historycomando Readline), que pesquisa para trás no histórico para recuperar comandos longos inseridos anteriormente, mas agora prefiro usar aliases e scripts / funções de shell. De qualquer forma, o historycomando interno do Bash pode ser usado para carregar uma lista de comandos personalizados no seu histórico atual.

history -r [filename]

Na página do manual do bash:

Leia o conteúdo do arquivo de histórico e anexe-o à lista de histórico atual.

Automação de inicialização

Eu apenas tentei iniciar este comando automaticamente adicionando-o como a última linha no meu .bashrc. No entanto, os comandos do meu arquivo de histórico personalizado não estavam disponíveis quando iniciei um novo shell. Parece que o histórico do shell é carregado apenas do .bash_historyarquivo padrão : depois que os arquivos de inicialização foram processados ​​e pouco antes do prompt ser apresentado para o shell interativo. Infelizmente, parece que não há uma maneira fácil de automatizar isso.

Anthony Geoghegan
fonte
2

Como o @AnthonyGeoghegan observou, o histórico é carregado após o processamento dos arquivos de inicialização. Isso oferece uma maneira diferente de pré-carregar o histórico desejado em um arquivo de inicialização:

mv .bash_history .bash_history.tmp
cat .extra_hist .bash_history.tmp > .bash_history
# or swap them, to put the extra stuff at the end of the history, for
# quicker ^R access.

Observe que essa abordagem pode resultar em várias cópias dos seus comandos especiais sendo adicionadas ao seu .bash_history ao longo do tempo. Você pode agrupar seus comandos especiais com linhas de comentário, para encontrá-los e removê-los facilmente (via, por exemplo, sed) como parte do preenchimento do arquivo .bash_history. Algo como:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history
Schnitz
fonte