¿Por qué bash predeterminado parece no tener algunos de los comandos que he usado en el historial pero sí tiene otros?

¿Por qué bash predeterminado parece no tener algunos de los comandos que he usado en el historial pero sí tiene otros?

En una Mac, Sierra.

No tengo HISTconfiguraciones relacionadas que pueda ver:

~ @ Magni (jcollum) 
$ env|grep HIST

~ @ Magni (jcollum) 
$ cat ~/.bash_profile | grep HIST

~ @ Magni (jcollum) 

Pero tengo cosas en mi historial que hice ayer que no están ahí después de reiniciar. Realmente dudo mucho que pusiera espacios antes del comando cada vez que lo hacía.

Sé que hay publicaciones aquí que me dicen cómo solucionarlo, pero me gustaría saberlo.por quésucede de esta manera.

Por ejemplo, cuando busqué un curlarchivo que ejecuté ayer, nada:

~ @ Magni (jcollum) 
$ history | grep curl 
166  curl -X POST -d [email protected] -d password=********** http://localhost:3000/login
503  hg curl 
519  history | grep curl 

¿Hace 400 comandos? Sé que lo he usado curluna docena de veces durante la semana pasada, pero (y no uso bash lo suficiente como para ejecutar cientos de comandos esta semana).

Básicamente estoy perplejo y no sé por qué falta tanto de lo que hice. ¿Es posible que el historial solo se registre desde una instancia de bash?

Respuesta1

¿Es posible que el historial solo se registre desde una instancia de bash?

Eso es algo que está pasando. La forma en que funciona el historial en bash, a menos que hayas hecho todo lo posible para cambiarlo, es:

  • Cuando se inicia bash, carga el historial guardado desde el archivo de historial.
  • Cada vez que se ejecuta un comando, se agrega al historial en la memoria de bash.
  • Cuando bash sale, guarda el historial acumulado en el archivo de historial.

Ahora supongamos que inicia dos instancias de bash. Ambos cargan el archivo histórico cuando comienzan. Ambos agregan los comandos que ejecutan a su propio historial. Cuando una instancia sale, guarda el historial anterior más sus propios comandos en el archivo de historial. Cuando la segunda instancia sale, guarda el historial anterior másespropio comando al archivo de historial y, al hacerlo, borra el historial de la primera instancia que salió.

El mecanismo de guardado del historial de Bash es demasiado simplista. Sus líneas de historial están a merced de todas las demás instancias en ejecución; la que salga en último lugar borra el historial de las demás. Las soluciones incluyen agregar el nuevo historial al archivo de historial en lugar de sobrescribir el archivo de historial con todo el historial en memoria, o agregar líneas al archivo de historial tan pronto como se ejecutan. VerPreservar el historial de bash en múltiples ventanas de terminalyPreservar el historial de bash en múltiples ventanas de terminalpara conocer algunas formas de implementar esta y otras variantes.

La solución más sencilla es ejecutar zsh, que guarda el historial de forma sensata de forma predeterminada. Recomiendo esto, especialmente porque estás ejecutando macOS que está atascado en una versión antigua de bash porque a Apple no le gusta la licencia de las versiones lanzadas desde 2009.

información relacionada