arquivo de histórico de registro de data e hora causando linhas erradas no comando de histórico

arquivo de histórico de registro de data e hora causando linhas erradas no comando de histórico

Eu tenho configuração .bash_profile para exportar para um arquivo de histórico:

export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')

Então estou exportando carimbos de data/hora para o comando de histórico.

export HISTTIMEFORMAT="%Y/%m/%d %T "

Essa combinação fez com que os carimbos de data e hora da época fossem gravados no arquivo de histórico:

#1463962023
top

Então eu escrevi em um perl um liner no .bash_profile para escrever apenas o carimbo de data / hora legível por humanos no arquivo, eliminando assim a linha de época: (e algumas outras linhas)

format_history () {
local file=/root/history/.bash_hist-$(who -m | awk '{print $1}')
perl -i -pe 's/^#(\d{10})$/"# ".localtime($1)/e' "$file"
}

shopt -s histappend
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

Agora meu arquivo exportado fica assim:

# Sun May 22 19:06:41 2016
last

O que é ótimo e exatamente o que eu quero. No entanto, isso tem o efeito colateral indesejado de anexar uma linha dedicada no comando histórico que contém apenas datas que não precisam estar lá.

 824  2016/05/22 19:07:33 # Sun May 22 19:06:41 2016
 825  2016/05/22 19:07:33 last

Como posso gravar no arquivo como desejo, sem fazer com que o comando de histórico relate essas linhas indesejadas?

NOTA - Esta anomalia com o comando histórico parece ser "ativada" quando eu faço login em um sistema. (Eu uso ssh) Posso estar em sessão, executar 10 comandos, depois executar o comando de histórico e tudo parece normal. No entanto, assim que você fizer logout e login novamente e executar o comando de histórico, as linhas erradas serão exibidas.

ATUALIZAÇÃO: reduzi o problema à linha:

PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

Quando comento esta linha, o comando history funciona conforme o esperado. Porém, este também foi o comando que executou a formatação do arquivo histórico. Tentei retirar a parte "history -a" da linha, deixando o resto, mas isso não faz diferença. Se eu deixasse a linha inteira comentada, como poderia invocar a formatação do arquivo usando o script perl?

Responder1

Eu deixaria o arquivo de histórico em paz e implementaria sua gravação de comandos no manipulador prompt_command. Eu também faria com que ele fosse gravado em um arquivo de log privado, então você não teria conflitos com outros usos do arquivo de histórico ou problemas com outros usuários acessando/root

informação relacionada