Eu tenho a 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 os registros de data e hora para o comando de histórico.
export HISTTIMEFORMAT="%Y/%m/%d %T "
Essa combinação fez com que os registros de data e hora da época fossem gravados no arquivo de histórico:
#1463962023
top
Então, eu escrevi em um perl one liner no .bash_profile para apenas escrever no registro de hora legível para o 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 é 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 history 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 escrever no arquivo como desejo, sem fazer com que o comando history relate essas linhas indesejadas?
NOTA - Essa anomalia com o comando history parece estar "ativada" quando eu fizer login em um sistema. (Eu uso o ssh) Eu posso estar na sessão, executar 10 comandos, depois executar o comando history e tudo parece normal. No entanto, assim que um logout e login novamente e executar o comando history, ele exibirá as linhas erradas.
ATUALIZAÇÃO: reduzi o problema para a linha:
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"
Quando eu comento essa linha, o comando history funciona como esperado. No entanto, esse também foi o comando que executou a formatação no arquivo de histórico. Eu tentei remover a parte "história -a" da linha, deixando o resto, mas isso não faz nenhuma diferença. Se eu fosse deixar a linha inteira comentada, como eu poderia invocar a formatação no arquivo usando o script perl?