Como eu posso adicionar entradas programaticamente ao histórico de Bash e ter carimbos de data e hora funcionando corretamente?

5

No CentOS 6.2 e Bash 4.1.2 (1), eu adicionei um arquivo em /etc/profile.d que contém:

HISTTIMEFORMAT='%c : '
history -s "# some text as a marker"

Isso funciona na medida em que a variável é definida e o marcador é gravado na lista de histórico do usuário (e para ~/.bash_history quando eles exit ).

Os problemas são:

  • history -s não adiciona um timestamp quando adiciona o marcador
  • rolando de volta pelo histórico, para no marcador (o arquivo ~/.bash_history não é lido na memória)
  • a entrada do histórico para o comentário do marcador tem "??" em vez do timestamp (ausente)

Eu tentei adicionar:

history -s "#$(date +%s)"

antes do outro comando history -s , mas o Bash vê isso como um comando no histórico, em vez de um timestamp, embora esteja no mesmo formato.

Outra opção é anexar o marcador e um registro de data e hora diretamente a ~/.bash_history , mas eles não são contíguos à atividade no histórico da sessão quando ela é anexada posteriormente. Pode haver outras sessões que são adicionadas entre o marcador e sua sessão relacionada devido a outros usuários ou várias sessões de um único usuário.

Existe alguma maneira de resolver esses problemas?

Atualização:

Eu tentei adicionar set -o history (e removi a linha history -s "#$(date +%s)" ) e parece resolver o problema de rolagem do histórico mencionado acima, mas a falta de timestamp ainda é um problema.

    
por Dennis Williamson 01.06.2012 / 20:20

1 resposta

2

Postei essa pergunta na lista de discussão de ajuda-bash e recebi uma resposta de Chet Ramey, o mantenedor do Bash .

Ele sugeriu adicionar um dos seguintes antes do comando history -s :

set -H    # aka set -o histexpand

ou

histchars='!^#'

Eu tentei cada um deles e ambos trabalham. O motivo é que o caractere de comentário do histórico, cujo padrão é # , não foi definido no ponto em que o código do perfil está sendo executado e, portanto, é nulo ( %code% ).

Aqui está o meu arquivo de trabalho:

HISTTIMEFORMAT='%c : '
histchars='!^#'
set -o history
history -s "# some text as a marker"
    
por 23.06.2012 / 22:13