Como impedir que o Bash altere o histórico?

26

Se eu pressionar as setas Para cima ou Para baixo no teclado e modificar algo do meu histórico, isso mudará para sempre. Mesmo se eu pressionar Ctrl-C e tentar trazê-lo novamente, ele ainda será alterado - eu perdi essa entrada no meu histórico.

Como posso impedir que isso aconteça?

Mehrdad
fonte
3
Eu amo o título desta pergunta. Você pode realmente alterar a história e está reclamando? O que há de errado com você?!
Daniel Beck
@ Daniel: Lol, sim ... Quero dizer, é como se eu estivesse mudando meu passado. Claramente sem sentido, e fica ridiculamente irritante depois de um tempo. : \
Mehrdad
Btw, se você usar history-search-xxx , o comportamento será diferente. Talvez isso seja algo para você?
Daniel Beck
@ Daniel: Isso é realmente útil - muito obrigado. Ainda assim, eu gostaria de saber a resposta para essa pergunta, porque às vezes os comandos não se parecem tanto, e isso não funciona.
Mehrdad
a pesquisa de histórico com um prompt vazio funciona como o histórico anterior anterior / seguinte, ou seja, exibindo todas as entradas.
Daniel Beck

Respostas:

17

Você deseja a configuração de linha de leitura:

set revert-all-at-newline on

Você pode colocá-lo ~/.inputrc(veja a nota abaixo) ou colocar o bind 'revert-all-at-newline on'seu ~/.bashrc.

Demo:

$ man bash
$ bind 'set revert-all-at-newline on'
$ man bsh # up arrow and edit
No manual entry for bsh
$ man bash # three up arrows

Mais detalhes estão na página de manual do Bash :

revert-all-at-newline

Se definido como ' on', o Readline desfará todas as alterações nas linhas do histórico antes de retornar quando a linha de aceitação é executada. Por padrão, as linhas do histórico podem ser modificadas e reter listas individuais de desfazer nas chamadas para a linha de leitura. O padrão é ' off'.


Nota:

Se um novo ~/.inputrcarquivo for criado com a finalidade de definir revert-all-at-newline, lembre-se de que o bash usará as configurações de linha de leitura nesse arquivo, em vez de quaisquer configurações que possam estar no arquivo /etc/inputrc. Ou seja, quaisquer configurações especificadas em /etc/inputrcnão terão mais efeito. Portanto, se o /etc/inputrcarquivo existir, é uma boa ideia começar ~/.inputrccom a linha:

$include /etc/inputrc

sarnold
fonte
Você é demais, é exatamente disso que eu preciso. Não quero mais dar um soco no meu monitor. : D +1000000 (eu desejo)
Mehrdad
5

Eu entro:

ls /tmp

- Maravilhoso. Agora eu não quero entrar

ls /temp 

e pode impedir que ele entre no histórico; portanto, substitua ls / tmp, se eu iniciar o comando com um espaço em branco:

 ls /temp

É difícil ver, mas se você souber ...

É controlado por

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

ignoredups ignora apenas comandos duplicados, ignoreboth ignora espaços no início da linha, o que é útil para ocultar senhas não ocultas.

Mas talvez você esteja em busca de uma solução, onde termine com os dois comandos, o antigo não modificado e o novo. Minha versão do bash ou configurações se comporta assim, mas não sei, o que é diferente da sua.

Usuário desconhecido
fonte
Ha; Eu sempre assumi que não salvar comandos com um espaço à esquerda era um bug. Obrigado. :)
sarnold