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?
Eu uso o bash e gostaria de evitar que alguns comandos sejam mantidos no histórico.
Respostas:
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.
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
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
Você pode desarmar a HISTFILE
variá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.
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.
HISTCMD
armazena 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