Como posso executar um comando no zsh sem empurrá-lo para o histórico da sessão atual? [duplicado]

30

Tanto o bash quanto o zsh suportam um atalho de não colocar um comando no histórico se você o preceder com um espaço. Isso funciona muito bem em todas as sessões (se você tiver setopt histignorespace ). No entanto, o comando ainda está no histórico da sessão atual.

Como posso evitar colocar um comando no histórico da sessão atual (ou remover se depois de executá-lo)?

    
por Nevir 16.09.2012 / 01:07

2 respostas

40

Com setopt histignorespace , o comando é removido do histórico da sessão atual. Se você testou pressionando Up e vendo que a linha de comando ainda está lá, é um recurso.

Note that the command lingers in the internal history until the next command is entered before it vanishes, allowing you to briefly reuse or edit the line. If you want to make it vanish right away without entering another command, type a space and press return.

Se você digitou um comando que não começou com um espaço ou não tinha a opção histignorespace ativada, não há como remover o comando do histórico da sessão atual (você pode editar o arquivo de histórico externamente).

    
por 16.09.2012 / 01:52
2

Se você estava usando bash, em vez de zsh, você poderia usar essas técnicas para remover um comando do histórico:

Pressione a seta para cima para chegar à linha e pressione Ctrl-U para apagá-la. Não pressione ENTER, em vez disso, pressione a seta para cima ou para baixo para ir para outra linha do histórico.

A linha que você deseja apagar será substituída por uma linha vazia. Eu não sei se isso está documentado em algum lugar, eu percebi isso acidentalmente há vários anos ... Eu acho que o apagamento é apenas uma edição completa :) da linha histórica.

por exemplo, em vez de pressionar ^ U para limpar a linha, altere algo. NÃO ACESSE , pois isso criaria uma nova entrada de histórico. Pressione a seta para cima ou para baixo. A linha agora é alterada permanentemente no histórico, como você pode ver usando a seta para cima / para baixo para trazê-la de volta à exibição.

Por permanente, quero dizer que depois de pressionar as teclas de seta para cima / para baixo, a linha permanecerá alterada mesmo que você pressione Enter em um comando novo / editado. Somente a linha editada permanecerá no histórico substituindo o original e será salva em seu $ HISTFILE como de costume quando você sair desse shell.

Você pode pressionar ^ C para interromper uma edição ou uma exclusão, para impedir que ela afete o histórico.

Outro método é usar history -d se você souber o número da linha do histórico. Por exemplo:

$ history | grep history | tail
[...irrelevant, deleted...]
10113  help history
10114  history | grep history | tail

$ history -d 10113

$ history | grep history | tail
[...irrelevant, deleted...]
10113  history -d 10113
10114  history | grep history | tail

A linha help history foi excluída pelo history -d 10114

    
por 16.09.2012 / 12:45