Existe alguma maneira de desfazer uma modificação do histórico bash?

9

Pressionando para cima, eu posso passar pelos comandos inseridos anteriormente. Eu notei que, se eu modificar um deles, isso altera o histórico. Por exemplo, se eu digitar:

echo a
echo b
echo c
[up][up][backspace]d[ctrl+c]

o histórico agora mostra que o segundo comando era echo d , não echo b . Como faço para manter o primeiro echo b no histórico?

Por exemplo, digamos que eu execute um comando muito longo, com muitas opções. então eu quero executá-lo novamente, com uma pequena alteração, então eu volto através do histórico para encontrá-lo, fazer a mudança, mas então percebo que na verdade eu não preciso re-executá-lo, tendo apenas pensado em outra opção fazer em vez disso. mais tarde, quero voltar e me lembrar de que comando eu corri - mas, espere, a história agora está mostrando a coisa errada!

Isso aparece muito raramente, mas quando isso acontece eu acho realmente irritante. Existe alguma maneira de preservar automaticamente o histórico original?

    
por Benubird 23.05.2014 / 13:27

2 respostas

6

Tente colocar seu ~/.inputrc

 set revert-all-at-newline on

Em alguns casos, você pode encontrá-lo no valor padrão (Off).
Ele deve forçar readline a desfazer todas as alterações nas linhas do histórico antes de retornar quando accept-line for executado. (mais informações em man bash ).

Editar:
CTRL+c e set revert-all-at-newline on funcionam bem desde bash-4.3.30 .

# GNU bash, version 4.3.30(1)-release
# Emacs-mode

echo c
[up][backspace]d[Ctrl+c][up] # you should see echo c

Mas:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d
    
por 23.05.2014 / 20:36
3

Normalmente:

CTRL-a # ENTER

fará isso.

O comando original será lembrado se você executar o comando modificado. Claro, você não quer realmente executar, então você pode comentar a linha com # .

No seu exemplo, você teria no seu histórico: echo a , echo b , echo c , # echo d .

    
por 23.05.2014 / 14:11