¿Cómo detener la edición de bash del historial cuando reutilizo y modifico una entrada?

20

Algunas instancias de bash cambian el historial de comandos cuando reutiliza y edita un comando anterior, otras aparentemente no. He estado buscando y buscando, pero no puedo encontrar nada que diga cómo evitar que se modifiquen los comandos en el historial cuando se reutilizan y editan.

Hay preguntas como esta , pero parece decir cómo lidiar con la historia que se está editando. Recientemente me encontré con una instancia de bash que edita el historial cuando reutiliza un comando: todos los shells de bash anteriores que he usado se han configurado (hasta donde sé) para que no cambien el historial cuando se reutiliza y edite un comando. (Quizás no he prestado la debida atención a mi historial de shell durante los últimos 15 años más o menos ...)

Entonces esa es probablemente la mejor pregunta: ¿PUEDO decirle a bash NUNCA que modifique el historial? Y si es así, ¿cómo?

Richard Wiseman
fuente
Puede usar history -ppara hacer expansiones de historial sin afectar el archivo de historial. Puede hacer history -slo mismo y agregar al historial sin ejecución. Puede hacer HISTIGNORE='start of a command I never want in history.*:command2.*'para mantener ciertos comandos fuera de la historia.
mikeserv
1
¿No set revert-all-at-newline onresuelve el problema en la pregunta que vincula? ¿Puedes mostrar cómo reproducir el problema? Tenga en cuenta que también puede usar zshpara un comportamiento más en línea con lo que desea.
Stéphane Chazelas
@mikeserv Mirar la página de manual history -pes algo que tendría que hacer para cada comando que quiera reutilizar, ¿es así? Si es así, eso no es exactamente lo que estoy buscando. Como mencioné, he usado instancias de bash que nunca modifican el historial cuando un comando se reutiliza y edita.
Richard Wiseman
@ StéphaneChazelas No, no creo que revert-all-at-newlinesea ​​lo que necesito. Si edito un comando y presiono CTRL-C para cancelarlo, tampoco quiero que eso afecte el historial. Nunca antes tuve que configurar bash para no modificar el historial, lo cual es parte de la razón por la que estoy confundido de por qué a veces una instalación nueva se comporta de una manera y otras de otra. Por cierto, en una instancia que no edita el historial de reutilización de comandos, a bind -V | grep revertindica que revert-all-at-newlineestá configurado en 'apagado'.
Richard Wiseman
2
En realidad, esto tiene muy poco que ver bash. Se trata de readline. Hay diferentes implementaciones de la readlinebiblioteca, y también tiene su propio conjunto de configuraciones (MUCHAS de ellas) y su propio archivo de configuración. No estoy seguro exactamente si esto es una configuración o simplemente una diferencia de implementación, pero debe buscar en la documentación relacionada con readline, no bash.
orion

Respuestas:

9

Resulta que revert-all-at-newlinees la respuesta. Necesitaba incluir set revert-all-at-newline onen mi ~/.inputrcarchivo, ya que el uso del setcomando en el indicador bash no tuvo ningún efecto. (Entonces, por supuesto, tuve que comenzar un nuevo shell).

Además, descubrí que ~/.inputrcse carga en lugar de /etc/inputrc si está presente, lo que significa que los valores predeterminados definidos en este último ya no estarán activos cuando cree ~/.inputrc. Para solucionar esto, comience ~/.inputrccon $include /etc/inputrc.

Gracias a @ StéphaneChazelas por señalarme en la dirección correcta.

Richard Wiseman
fuente
0

En ~ / .bashrc puedes agregar

shopt -s histappend
Jeff Coleman
fuente
Gracias, pero eso no tiene ningún efecto sobre el problema que estoy experimentando. Acabo de comprobar y histappendestá activado, pero mi historial aún muestra ediciones de comandos anteriores.
Richard Wiseman
He buscado en la página de manual de bash y he encontrado las reglas para el historial de edición. Readline Command Names Es bastante descriptivo, pero no veo una opción para lo que desea, excepto tal vez: redraw-current-line Actualizar el actual línea.
Jeff Coleman
También hay una opción revert-all-at-newline que está desactivada por defecto
Jeff Coleman