Evite manter o comando no histórico

33

Eu uso o bash e gostaria de evitar que alguns comandos fossem mantidos no histórico.

  • É possível fazer isso apenas para o próximo comando?
  • É possível fazer isso durante toda a sessão?
por Luc M 01.08.2009 / 06:53

6 respostas

36

e acabei de me lembrar de outra resposta, esta é a verdadeira resposta à sua pergunta.

se você tiver "ignorespace" no HISTCONTROL, então o bash não se lembrará de nenhuma linha que comece com um caractere de espaço. ele não aparecerá no histórico do shell atual, e muito menos ser salvo no $ HISTFILE.

por exemplo. Eu tenho export HISTCONTROL = 'ignoreboth: erasedups' no meu ~ / .bashrc

aqui estão os detalhes da página man bash:

HISTCONTROL
  A colon-separated list of values controlling how commands are
  saved on the history list.  If the list of values includes
  ignorespace, lines which begin with a space character are not
  saved in the history list.  A value of ignoredups causes lines
  matching the previous history entry to not be saved.  A value of
  ignoreboth is shorthand for ignorespace and ignoredups.  A value
  of erasedups causes all previous lines matching the current line
  to be removed from the history list before that line is saved.
  Any value not in the above list is ignored.  If HISTCONTROL is
  unset, or does not include a valid value, all lines read by the
  shell parser are saved on the history list, subject to the value
  of HISTIGNORE.  The second and subsequent lines of a multi- line
  compound command are not tested, and are added to the history
  regardless of the value of HISTCONTROL.
    
por 01.08.2009 / 08:00
19

Aqui estão algumas lições de história que aprendi no googling:

Você pode definir o histórico para ignorar determinadas strings. Neste exemplo, ignorei os comandos ls, passwd e qualquer comando prefixado pelo espaço de caracteres.

export HISTIGNORE="ls:passwd: "

Para desativar o histórico da sua sessão, você pode emitir:

export HISTSIZE=0

Referência

    
por 01.08.2009 / 07:22
7

Se você quiser apenas remover o último comando do histórico, você pode clicar em Seta para cima , seguido por Ctrl-U (apagar para o início da linha) , então Seta para cima novamente.

Você pode apagar qualquer linha individual do histórico como esta. Basta usar a seta para cima ou pesquisar ou o que for para torná-la a linha de comando atual sendo editada, em seguida, pressione Ctrl - U e, em seguida, Seta para cima ou seta para passar para outra linha do histórico.

Eu descobri isso por acidente há um dia anos atrás. Não tenho ideia se está documentado ou não.

Geralmente, no entanto, é menos complicado simplesmente não salvar o histórico do shell atual com:

HISTFILE=/dev/null
    
por 01.08.2009 / 07:50
3

Você pode remover a variável HISTFILE . De man bash :

  HISTFILE
         The name of the file in which command history is saved (see HIS-
         TORY below).  The default value is ~/.bash_history.   If  unset,
         the  command  history  is  not  saved  when an interactive shell
         exits.

Eu não acho que isso impeça que o comando apareça no histórico do shell local antes do shell sair.

    
por 01.08.2009 / 07:00
2

Eu às vezes faço

export HISTFILE=/dev/null
    
por 06.08.2009 / 12:55
1

Eu vejo que ninguém escreveu esse método, então eu irei.

history -d $((HISTCMD-1)) && history -d <command or number of command>

history -d exclui a entrada mencionada do histórico.

HISTCMD armazena o command_number do comando a ser executado a seguir. Então, (HISTCMD-1) refere-se ao último comando executado.

Eu fiz um pequeno filme que mostra como funciona: link

Depois de executar o comando e também excluir o próprio comando, a seta não exibirá o comando, portanto, se você planeja usá-lo com frequência, seria melhor criar um alias:

alias hc='history -d $((HISTCMD-1)) && history -d $1'

Então você pode fazer:

$ hc command
    
por 20.11.2016 / 17:48