Como obter o histórico de comandos apenas para o processo de shell atual?

1

Em um bash shell, quando executo history , ele fornece o histórico de todos os comandos, não apenas os que foram digitados no shell atual, mas também os dos shells anteriores. Como posso obter o histórico dos comandos digitados apenas no shell atual até agora? Isso é útil quando você deseja encontrar um comando que você sabe que foi digitado no shell atual. Obrigado.

    
por Tim 18.12.2016 / 06:17

2 respostas

3

Contanto que histappend não está definido e nenhum jogo é jogado com PROMPT_COMMAND , o histórico pode:

  -a   Append the ''new'' history lines (history lines entered 
       since the beginning of the current bash session) to 
       the history file.

Se quisermos deixar nosso arquivo de histórico real sem danos, poderemos fazer:

$ cat .bash_history
#1482030925
ls
#1482030926
date
#1482030928
free

$ echo "one more command"
one more command

$ echo "another command"
another command

$ HISTFILE=foo history -a
$ cat foo
#1482031879
cat .bash_history
#1482031887
echo "one more command"
#1482031892
echo "another command"
#1482031899
HISTFILE=foo history -a

Os comandos anteriores de sessões anteriores (ls, date, free) não aparecem em nosso "novo" arquivo de histórico, foo - espero que o exemplo traga esse ponto.

Outra abordagem seria salvar o arquivo de histórico atual (no início da sessão de login!) e depois anexar o histórico da sessão atual ao arquivo de histórico (executando "history -a" ou efetuando logout) e então compare os dois arquivos:

$ history > hist.backup

$ echo "a new command"
a new command
$ echo "one more command"
one more command

$ history > hist.current 
$ diff hist.{backup,current}
4a5,7
>     5  2016-12-17 19:38:57 echo "a new command"
>     6  2016-12-17 19:39:01 echo "one more command"
>     7  2016-12-17 19:39:07 history > hist.current 

Nota: Sou um grande fã de definir HISTTIMEFORMAT='%F %T ' (introduzido no bash 3, IIRC), timestamps ajudam muito a descobrir quando um comando foi executado.

    
por 18.12.2016 / 08:36
1

Use comp para comparar todo o histórico (incluindo a sessão atual de Bash) com o histórico já persistido em .bash_history e imprimir apenas as linhas exclusivas da sessão atual - que deve mostrar apenas os comandos que foram executado desde o início do shell Bash atual

comm -23 <( history | cut -c 8- ) ~/.bash_history
    
por 01.02.2017 / 05:04