shell_session_history_check
llama a shell_session_history_enable
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 desglosarlo.
$ 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 la PROMPT_COMMAND
(suponiendo que su PROMPT_COMMAND
comienza con shell_session_history_check;
) para que sólo se ejecute en el primer aviso.
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 por defecto de HISTFILE
( ~/.bash_history
) y establece el SHELL_SESSION_HISTORY
a 1
(verdadero).
Así que esta pregunta se reduce a: ¿Por qué se guarda el historial aunque HISTFILE
no está configurado con un nombre de archivo único?
Pues sigue funcionando igual. Una vez que el intérprete de comandos sale, se anexa a ~/.bash_history
. La diferencia es que no tiene archivos únicos que registren cada sesión .
¿Por qué querría archivos únicos para registrar cada sesión?
Mira esto Publicación en Reddit :
(~/.bash_sessions/) se utiliza para almacenar los archivos HISTFILE y .session que son exclusivos de las sesiones. Si $BASH_SESSION o $TERM_SESSION_ID se se establece al iniciar el shell (es decir, si Terminal está reanudando desde un estado guardado), el HISTFILE asociado se fusiona con el actual y se ejecuta el archivo .session. El guardado de la sesión se facilita por medio de de una trampa EXIT que se establece para una función bash_update_session_state.
Esencialmente, esto sienta las bases para que podamos extender la reanudación de sesión de Terminal utilizando nuestros propios archivos rc. Al implementar nuestra propia extensión de bash_update_session_state, podemos, por ejemplo, añadir a los archivos .session que se ejecutan al reanudar la sesión.
0 votos
¿De dónde viene esa función? No viene con bash. ¿Y qué significa tu primer párrafo? ¿Es una cita de algún sitio? ¿De dónde?
0 votos
Actualizado el primer párrafo. Es una función específica de Mac.