O comando 'history' é usado para exibir o conteúdo de um arquivo de histórico bash além de '.bash_history'?

4

Ao fazer algumas instalações, altero a variável 'HISTFILE' para um arquivo diferente para gravar os comandos usados. Agora eu quero usar o comando history para exibi-los exatamente como com o comando history , cujo padrão é usar o arquivo .bash_history .

Qual opção deve ser passada para o comando history ? Quando tento history ~/.history.d/alternate_history , recebo a mensagem de erro

-bash: history: /home/vfclists/.history.d/alternate_history: numeric argument required.

A ajuda de man lista algumas opções que parecem fazer algumas alterações em outros arquivos de histórico que eu não quero.

    
por vfclists 13.10.2016 / 08:14

2 respostas

4

O comando history nunca funciona em um arquivo, apenas em sua lista de histórico na memória. Você só pode ler ( r ), escrever ( -w ) e anexar ( -a ) essa lista de ou para um arquivo e acessar ou manipular a lista na memória. A leitura de um arquivo substituirá ou estenderá o histórico na sua sessão atual do shell.

Você pode, no entanto, gerar outro shell e manipular seu histórico para executar qualquer comando desejado, sem afetar o histórico do seu shell atual:

bash -c 'history -cr file ; history'

ou

( history -cr file ; history )

Você pode adicionar quaisquer opções de histórico desejadas ao segundo comando history nos dois casos. Se você estiver fazendo muito isso, você pode querer definir uma função aceitando o arquivo como um argumento e executando a versão do subshell:

histfile() {
    ( history -cr "$1" ; history )
}

Se você estiver interessado em exibir carimbos de hora salvos, também precisará definir HISTTIMEFORMAT . Se você estiver usando um subshell e obtiver registros de data e hora no shell do host, ele deverá estar lá automaticamente, mas para a versão bash -c ou um script, será necessário defini-lo:

bash -c 'history -cr file ; HISTTIMEFORMAT="%Y%m%d%H%I%S " history'

Você também pode export da variável do shell pai.

    
por 13.10.2016 / 10:12
3

O atual history do seu shell atual é armazenado na memória, ele é gravado apenas no HISTFILE assim que o shell é encerrado.

Você pode fazer isso acontecer antes de sair do shell com history -a . Há também argumentos para ler o conteúdo de um arquivo no histórico atual, etc. Essencialmente é um RTFM: -)

Você pode escrever o histórico atual com history -a temp_history_file , depois ler os novos com history -r new_history_file . Seu histórico de comandos teria então os comandos de new_history_file como suas entradas mais recentes.

    
por 13.10.2016 / 08:37