arquivo de histórico de timestamp que causa linhas erradas no comando history

1

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?

    
por user53029 23.05.2016 / 05:51

1 resposta

0

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

    
por 23.05.2016 / 20:47