¿Por qué el historial de bash en mi mac no se guardará?

28

Siempre he usado bash para el trabajo, y nunca tuve problemas con él. Ahora, no guarda ningún comando en el historial nuevamente. Si abro un terminal de ventana, pruebo algunos comandos, actúa como si todo hubiera funcionado bien y me muestra el historial con las teclas de flecha. Pero si cierro la ventana (y es el momento en que se supone que se debe guardar en el archivo .bash_history) y abro otra, no hay signos de los últimos comandos.

¿Cómo puedo saber qué está yendo mal? O vuelva a configurar todo desde el blanco.

abaini01
fuente
Podría ser su perfil o archivo rc. Que hay en ellos
user14492
1
¿Cuáles son los permisos y el propietario en su .bash_history? Los míos son 600 y son de mi propiedad. Además, ¿qué hay en $ HIST_FILE?
blm
@blm Los permisos son correctos; imprimiendo el $ HIST_FILE me enteré de .bash_sessions . Aparentemente hay problemas cuando, al final de una sesión, el sistema operativo guarda esos archivos en el archivo de historial. No quiero investigar más, así que simplemente puse esto en mi casa .bash_sessions_disabley sé que vuelve al comportamiento predeterminado
abaini01
Considere presentar un informe de error con Apple: developer.apple.com/bug-reporting
Chris Page

Respuestas:

31

Hice esto:

Agregar una variable al .bash_profilearchivo

SHELL_SESSION_HISTORY=0

reiniciar el terminal y después de eso funciona como me gustaría. (Se guardaron los comandos después de que cerré la terminal)

PD: también uso las variables HISTFILESIZEyHISTSIZE

HISTSIZE es el número de líneas o comandos que se almacenan en la memoria en una lista de historial mientras su sesión de bash está en curso.

HISTFILESIZE es el número de líneas o comandos que (a) están permitidos en el archivo de historial en el momento del inicio de una sesión, y (b) se almacenan en el archivo de historial al final de su sesión de bash para usar en futuras sesiones.

Sysqa
fuente
3
Agregar esa línea me funciona bien en El Capitán, gracias.
Aidan
2
¡Gracias! Me encantaría saber por qué esto también funciona, si alguien sabe. (Historia = 0 implicaría para mi ignorante mente que toda la historia se perderá, pero parece tener el efecto contrario.)
Mike Williamson
@Sysqa ¿Hay alguna solución "en el medio"? La función que "guarda y restaura el historial de comandos bash de forma independiente para cada sesión de terminal restaurada" parece una buena característica de la que algunos programas podrían beneficiarse. ¿Hay alguna forma de obtener los beneficios de la configuración anterior y también la nueva con algún tipo de configuración?
loco.loop
8

A partir de OS X 10.11 El Capitan , el script instalado en el sistema se /etc/bashrc_Apple_Terminalcoordina con la Terminal para guardar / restaurar historiales de comandos separados para cada terminal restaurada para Reanudar .

Lea los comentarios /etc/bashrc_Apple_Terminalpara obtener una explicación de cómo administra los historiales de comandos por terminal y cómo personalizarlo.

Si personaliza, PROMPT_COMMANDasegúrese de concatenar el valor anterior para no eliminar el comando proporcionado por el sistema:

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

Si instala un EXITmanejador de señal trapasegúrese de hacer algo similar (o llame a shell_session_update desde su manejador si no puede encontrar la forma de concatenar el valor anterior, es un poco complicado).

Cuando salga del shell, este código guardará nuevos comandos en el historial del terminal en ~/.bash_sessions. Para ver si encuentra algún problema, en lugar de cerrar el terminal, salga del shell manualmente con exit(o Control-D). Registra mensajes de progreso. Observe si no se completa o si se muestra algún tipo de mensaje de advertencia o error.

En general, bashrc_Apple_Terminalintenta detectar y deshabilitar el historial por sesión si parece que el usuario ha realizado personalizaciones que no son compatibles con él. Parece que has encontrado uno que no maneja. Considere presentar un informe de error con Apple: https://developer.apple.com/bug-reporting/

Chris Page
fuente
No he hecho ninguna configuración especial, así que supongo que no es el problema. ¿Podría explicar qué hace PROMPT_COMMAND?
loco.loop
@ loco.loop ¿Quiere decir "¿Para qué es la variable PROMPT_COMMAND de Bash?" o quiere decir "¿Para qué /etc/bashrc_Apple_Terminalsirve PROMPT_COMMAND?" Si es esto último, lo remito al código, que está documentado en detalle. O bien, debe comenzar otra sesión de preguntas y respuestas sobre eso.
Chris Page
Me refiero a lo que PROMPT_COMMAND para ... @ChrisPage
loco.loop
@ loco.loop Le remito a la documentación de Bash, o le sugiero que comience un Q&A sobre eso.
Chris Page
6

Por si acaso hay otros por ahí que tienen RVM (Rubí Manager Versión) instalado: Compruebe si usted tiene la siguiente línea en el ~/.profile, ~/.bashrco los ~/.bash_profilearchivos.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

Probablemente sea RVM evitando el "gancho" de salida para que bash_sessions se ejecute.

Ese fue el problema para mí. Intenta comentarlo.

Fuente: Reddit.

Nate
fuente
3

En una nueva instalación de Mac OS X (actualizada a 10.13.6), el historial de comandos de bash no se guardaba. Tampoco había archivos .bashrc o .bash_profile. En este caso, solo agregando un archivo .bashrc vacío me lo arregló.

touch .bashrc

Eso parece ser todo lo que necesitas ...

Vesal
fuente
parece solucionar el problema en Mojave / 10.14, también :-)
ssc
3

Tuve el mismo problema con un osx Mojave recién instalado. Revisé mi ~/.bash_historyarchivo y vi esto:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

Simplemente volver a usar gilm resolvió el problema. Solía:

sudo chown gilm /Users/gilm/.bash_history

Y eso resolvió mi problema.

gilm
fuente
2

También puede crear un .bash_logoutarchivo con lo siguiente:

shell_session_update

Procedente del comentario de GitHub

Cazador
fuente
O, escriba manualmente trap shell_session_update EXITuna vez y cierre la sesión. Hay pistas en el /etc/bashrc_Apple_Terminalguión que son demasiado aburridas para incluir aquí.
MarkHu