Injetar linhas no bash history

8

Por padrão, o bash carrega linhas de ~/.bash_history para histórico. É possível adicionar arquivo personalizado para ser também carregado? Eu quero injetar o arquivo contendo comandos que eu uso com freqüência e acessá-los através de pesquisa embutida.

    
por rgtk 28.05.2015 / 20:16

3 respostas

13

Mantenho simples com alias h='history|grep' carregado no meu perfil Bash.

Portanto, 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 ", basta digitar !226

Esta é apenas a minha abordagem, mas talvez você possa modificar como você está lembrando os itens do histórico. Não acho que faça sentido injetar dados no arquivo de histórico.

    
por 28.05.2015 / 21:33
7

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

history -r [filename]

Na página do bash man:

Read the contents of the history file and append them to the current history list.

Automação de inicialização

Acabei de tentar 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 somente a partir do arquivo .bash_history padrão: após os arquivos de inicialização foram processados e apenas antes o prompt é apresentado para o arquivo interativo Concha. Infelizmente, parece que não há uma maneira fácil de automatizar isso.

    
por 28.05.2015 / 21:52
1

Como @AnthonyGeoghegan observou, o histórico é carregado depois que os arquivos de inicialização são processados. 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 na inclusão de várias cópias de seus comandos especiais em sua .bash_history ao longo do tempo. Você pode agrupar seus comandos especiais com linhas de comentário, para que você possa localizá-los e removê-los facilmente (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
    
por 29.05.2015 / 18:57

Tags