Evite manter o comando na história

33

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

  • É possível fazer isso apenas para o próximo comando?
  • É possível fazer isso durante toda a sessão?
Luc M
fonte
Observe que, se o objetivo é ocultar senhas nos argumentos da linha de comando, elas ainda estarão visíveis através do ps
Benitok

Respostas:

36

e acabei de me lembrar de outra resposta, essa é a resposta real à sua pergunta.

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

por exemplo, exporte HISTCONTROL = 'ignoreboth: erasedups' no meu ~ / .bashrc

aqui estão os detalhes da página de manual do bash:

HISTCONTROL
  Uma lista de valores separados por dois pontos que controla como os comandos são
  salvo na lista de histórico. Se a lista de valores incluir
  ignorespace, as linhas que começam com um caractere de espaço não são
  salvo na lista de histórico. Um valor de ignoredups causa linhas
  correspondendo à entrada do histórico anterior para não ser salvo. Um valor de
  ignoreboth é uma abreviação de ignorespace e ignoredups. Um valor
  de apagados faz com que todas as linhas anteriores correspondam à linha atual
  para ser removido da lista de histórico antes que essa linha seja salva.
  Qualquer valor que não esteja na lista acima é ignorado. Se HISTCONTROL for
  desabilitado ou não inclui um valor válido, todas as linhas lidas pelo
  analisador de shell são salvos na lista de histórico, sujeitos ao valor
  de HISTIGNORE. A segunda e subsequentes linhas de uma linha multilinha
  comando composto não são testados e são adicionados ao histórico
  independentemente do valor de HISTCONTROL.
cas
fonte
1
+1 para o truque espacial: D
petrus 07/04
19

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

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

exportar HISTIGNORE = "ls: passwd:"

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

exportar HISTSIZE = 0

Referência

Michael Havas
fonte
7

Se você quiser apenas remover o último comando do histórico, pressione Up-arrow, seguido por Ctrl - U(apagar para o início da linha) e Up-arrownovamente.

Você pode apagar qualquer linha individual da história como esta. Basta usar a seta para cima ou pesquisar ou qualquer outra coisa para torná-la a linha de comando atual que está sendo editada, pressione Ctrl - Ue, em seguida, Up-arrowou Down-arrowpara mover para outra linha do histórico.

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

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

HISTFILE=/dev/null
cas
fonte
3

Você pode desarmar a HISTFILEvariável. De man bash:

  HISTFILE
         O nome do arquivo no qual o histórico de comandos é salvo (consulte HIS-
         TORY abaixo). O valor padrão é ~ / .bash_history. Se não estiver definido,
         o histórico de comandos não é salvo quando um shell interativo
         saídas.

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

Greg Hewgill
fonte
2

Eu faço às vezes

export HISTFILE=/dev/null
Rory
fonte
1

Vejo que ninguém escreveu esse método, então eu o farei.

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

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

HISTCMDarmazena o número do comando do comando a ser executado a seguir. Portanto, (HISTCMD-1) refere-se ao último comando executado.

Eu fiz um pequeno filme do bash que mostra como ele funciona: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2

Depois de executar o comando e porque ele também exclui o próprio comando, subir 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
Itai Ganot
fonte