Respostas:
Se você deseja executar um comando sem salvá-lo no histórico, acrescente um espaço extra
prompt$ echo saved
prompt$ echo not saved \
> # ^ extra space
Para que isso funcione, você precisa ignorespace
ou ignoreboth
entra HISTCONTROL
. Por exemplo, execute
HISTCONTROL=ignorespace
Para tornar essa configuração persistente, coloque-a no seu .bashrc
.
Se você já executou o comando e deseja removê-lo do histórico, use primeiro
history
para exibir a lista de comandos em seu histórico. Encontre o número ao lado do que você deseja excluir (por exemplo, 1234) e execute
history -d 1234
Além disso, se a linha que você deseja excluir já tiver sido gravada em seu $ HISTFILE (o que normalmente acontece quando você encerra uma sessão por padrão), será necessário escrever novamente em $ HISTFILE ou a linha reaparecerá quando você abrir um novo sessão:
history -w
history -a
, nesse caso, já está gravado no arquivo de histórico, em vez de sair na configuração normal. Especificamente: mywiki.wooledge.org/BashFAQ/088
history -w
. Caso contrário, quando você sair, a linha excluída ainda estará lá!
history -w
after history -d {num}
era exatamente o que eu precisava - que petiscos críticos deveriam ser adicionados à resposta, caso contrário, um usuário pode pensar que uma exclusão temporária do shell atual é realmente permanente.
history -w
é necessário para entradas que já foram gravadas no .bash_history
arquivo. Como reproduzir (por exemplo, no CentOS 7 com configuração de estoque): 1. logon 2. comando enter echo foo
3. logout 4. logon novamente 5. excluir entrada para echo foo
6. logout 7. logon 7. logon novamente: a entrada ainda está lá. Dependendo de como você configura seu histórico do bash, talvez você possa reproduzir esse problema de outras maneiras - ou seja, se você provocar a gravação do histórico antes do logout.
Para limpar todo o seu histórico, use
history -c
Para excluir uma única linha, use
history -d linenumber
Eu tenho isso no meu ~/.bashrc
, o que faz com que o comando $ forget
exclua o comando anterior do histórico
function forget() {
history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);
}
history -d $( history | tail -n 1 | cut -f 1 -d " " )
seria mais simples?
history | tail -n1
é o history
próprio comando, portanto, a exclusão desse número obtém a entrada errada. No entanto, history -d $( history | awk 'END{print $1-1}' )
combina a seleção de linha, seleção de campo e subtração.
Você sempre pode editar e remover entradas de ~/.bash_history
, útil quando desejar remover uma entrada ou mais de uma entrada
Se você deseja esquecer toda a sessão do bash, pode kill
executar o processo atual do bash. Como a variável $$
mantém o pid
shell atual, você pode:
kill -9 $$
Você precisa escrever as alterações depois de limpar o histórico. E se você não gostaria de ter o comando wipe no histórico, é necessário executar o comando assim:
history -c && history -w && logout
Boa sorte.
Adding another point suppose if you want to delete a range of history lines
You can use below script.
Below example will delete history output from line 1 to line 150.
for i in `history | awk 'NR > 1 && NR <=150{print $1}'`; do history -d $i; done