Como parar a edição do histórico do bash quando reutilizo e modifico uma entrada?

20

Algumas instâncias do bash alteram o histórico de comandos quando você reutiliza e edita um comando anterior, outras aparentemente não. Estive pesquisando e pesquisando, mas não consigo encontrar nada que diga como impedir que os comandos no histórico sejam modificados quando reutilizados e editados.

Existem perguntas como essa , mas isso parece dizer como lidar com o histórico que está sendo editado. Recentemente, deparei-me com uma instância do bash que edita o histórico quando você reutiliza um comando - todos os shells anteriores do bash que usei foram (até onde eu notei) configurados para não alterar o histórico quando você reutiliza e edite um comando. (Talvez eu não tenha prestado a devida atenção ao meu histórico de conchas nos últimos 15 anos ou mais ...)

Então essa é provavelmente a melhor pergunta: Posso dizer ao bash NUNCA para modificar a história - e se sim, como?

Richard Wiseman
fonte
Você pode usar history -ppara fazer expansões do histórico sem afetar o arquivo do histórico. Você pode fazer o history -smesmo e anexar ao histórico sem execução. Você pode fazer HISTIGNORE='start of a command I never want in history.*:command2.*'para manter certos comandos fora do histórico.
mikeserv
11
A set revert-all-at-newline onpergunta que você vincula não resolve o seu problema? Você pode mostrar como reproduzir o problema? Observe que você também pode usar zshpara um comportamento mais alinhado com o que deseja.
Stéphane Chazelas
@mikeserv Olhando para a página de manual, history -pé algo que eu teria que fazer para cada comando que eu quero reutilizar - está certo? Nesse caso, não é exatamente o que estou procurando. Como mencionei, usei instâncias do bash que nunca modificam o histórico quando um comando é reutilizado e editado.
Richard Wiseman
@ StéphaneChazelas Não, acho que não revert-all-at-newlineé exatamente o que eu preciso. Se eu editar um comando e pressionar CTRL-C para cancelá-lo, também não quero que isso afete o histórico. Eu nunca tive que configurar o bash para não modificar o histórico, o que é parte da razão pela qual estou confuso sobre o motivo pelo qual, às vezes, uma nova instalação se comporta de uma maneira e às vezes da outra. A propósito, em uma instância que não edita o histórico na reutilização de comandos, a bind -V | grep revertindica que revert-all-at-newlineestá definido como 'off'.
Richard Wiseman
2
Na verdade, isso tem muito pouco a ver bash. É tudo sobre readline. Existem diferentes implementações de readlinebiblioteca e também possui seu próprio conjunto de configurações (MUITAS) e seu próprio arquivo de configuração. Não tenho certeza exatamente se essa é uma configuração ou simplesmente uma diferença de implementação, mas você deve procurar na documentação relacionada à linha de leitura, não no bash.
orion 23/01

Respostas:

9

Acontece que revert-all-at-newlineé a resposta. Eu precisava incluir set revert-all-at-newline onno meu ~/.inputrcarquivo, pois o uso do setcomando no prompt do bash não teve efeito. (Então, é claro, tive que iniciar um novo shell.)

Além disso, descobri que ele ~/.inputrcé carregado em vez de /etc/inputrc presente, o que significa que os padrões definidos no último não estão mais ativos quando você cria ~/.inputrc. Para corrigir isso, comece ~/.inputrccom $include /etc/inputrc.

Agradeço a @ StéphaneChazelas por me indicar a direção certa.

Richard Wiseman
fonte
0

Em ~ / .bashrc você pode adicionar

shopt -s histappend
Jeff Coleman
fonte
Obrigado, mas isso não afeta o problema que estou enfrentando. Acabei de verificar e já histappendestá ativado, mas meu histórico ainda mostra edições nos comandos anteriores.
Richard Wiseman
Pesquisei na página de manual do bash e encontrei as regras para o histórico de edição Readline Command Names É bastante descritivo, mas não vejo uma opção para o que você deseja, exceto talvez: redraw-current-line Atualize o atual linha.
Jeff Coleman
Há também um revert-tudo-em-linha nova opção que o padrão é off
Jeff Coleman