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

9

Ao pressionar para cima, posso passar pelos comandos inseridos anteriormente. Percebi, porém, que se eu modificar um deles, isso altera a história. Por exemplo, se eu digitar:

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

a história agora mostra que o segundo comando foi echo d, não echo b. Como mantenho o primeiro echo bda história?

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 ao histórico para encontrá-lo, faça a alteração, mas percebo que, na verdade, não preciso executá-lo novamente, pensando em outra opção fazer em vez disso. depois, quero voltar e me lembrar qual foi o comando que executei - mas espere, a história agora está mostrando a coisa errada!

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

Benubird
fonte
1
com historyvocê pode ver todo o comando. Depois você pode selecionar o que precisa. Qual shell você está usando agora?
Hastur 23/05
6
Eu não posso reproduzir isso. Se eu alterar c para d, pressione CTRL + C e pressione [para cima] novamente, ele ainda diz echo c.
Martin von Wittich

Respostas:

6

Tente colocar no seu ~/.inputrc

 set revert-all-at-newline on

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

Edit:
CTRL+c e set revert-all-at-newline onfunciona bem desde então 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
Hastur
fonte
Bom, esta é a melhor solução. Curiosamente, o CTRL-c fará com que ele se lembre do valor modificado, embora a exclusão total da linha ou a descida e pressionando enter ou executando outro comando restaurem o histórico.
Re: Serenevy
@DeanSerenevy: Graças tenho como sua solução também e eu começar a usar CTRL-a na nanotambém :-)
Hastur
4

Usualmente:

CTRL-a # ENTER

vai fazer isso.

O comando original será lembrado se você executar o comando modificado. Obviamente, você não deseja executar de verdade, para poder comentar com a linha #.

No seu exemplo, você teria, então, em sua história: echo a, echo b, echo c, # echo d.

Dean Serenevy
fonte
1
Você pode pressionar alt-shift-3para comentar a linha de comando atual se o seu bash estiver usando readline. /insert-commentem man 3 readline(ou man bash) para obter mais informações.
cychoi