shell_session_history_check
llama a shell_session_history_enable
, lo que crea un archivo de registro único para cada sesión de shell.
NOTA: shell_session_history_check
es una función específica de Mac.
Vamos a descomponerlo.
$ declare -f shell_session_history_check
shell_session_history_check ()
{
if [ ${SHELL_SESSION_DID_HISTORY_CHECK:-0} -eq 0 ]; then
SHELL_SESSION_DID_HISTORY_CHECK=1;
if shell_session_history_allowed; then
shell_session_history_enable;
fi;
if [ "$PROMPT_COMMAND" = "shell_session_history_check" ]; then
unset PROMPT_COMMAND;
else
if [[ $PROMPT_COMMAND =~ (.*)(; *shell_session_history_check *| *shell_session_history_check *; *)(.*) ]]; then
PROMPT_COMMAND="${BASH_REMATCH[1]}${BASH_REMATCH[3]}";
fi;
fi;
fi
}
El último if/else
elimina shell_session_history_check
de PROMPT_COMMAND
(asumiendo que su PROMPT_COMMAND
comienza con shell_session_history_check;
) para que solo se ejecute en el primer indicador.
shell_session_history_allowed
es verdadero por defecto, así que básicamente el comportamiento real es llamar a shell_session_history_enable
.
$ declare -f shell_session_history_enable
shell_session_history_enable ()
{
( umask 077;
/usr/bin/touch "$SHELL_SESSION_HISTFILE_NEW" );
HISTFILE="$SHELL_SESSION_HISTFILE_NEW";
SHELL_SESSION_HISTORY=1
}
Esta función sobrescribe el valor predeterminado de HISTFILE
( ~/.bash_history
) y establece el SHELL_SESSION_HISTORY
en 1
(verdadero).
Entonces, esta pregunta se reduce a: ¿Por qué se guarda el historial a pesar de que HISTFILE
no tiene un nombre de archivo único?
Bueno, todavía funciona de la misma manera. Una vez que el shell se cierra, se agrega a ~/.bash_history
. La diferencia es que no tiene archivos únicos que registran cada sesión .
¿Por qué querría que los archivos únicos registren cada sesión?
Echa un vistazo a esta publicación de Reddit :
(~ / .bash_sessions /) se utiliza para almacenar archivos HISTFILE y .session
que son exclusivos de las sesiones. Si $ BASH_SESSION o $ TERM_SESSION_ID es
establecer al iniciar el shell (es decir, si el terminal se está reanudando desde un
estado guardado), el HISTFILE asociado se fusiona con el actual,
y se ejecuta el archivo .session. El ahorro de sesión se facilita mediante
de una captura EXIT que se establece para una función bash_update_session_state.
Esencialmente, esto sienta las bases para que podamos extender
La sesión del terminal se reanuda utilizando nuestros propios archivos rc. Implementando
nuestra propia extensión de bash_update_session_state, podemos, digamos, agregar
Funcionalidad para los archivos .session que se ejecutan en el currículum.