shell_session_history_check
chiama shell_session_history_enable
che crea un file di registro univoco per ogni sessione di shell.
NOTA: shell_session_history_check
è una funzione specifica per Mac.
Scopriamolo.
$ 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
}
L'ultimo if/else
rimuove shell_session_history_check
da PROMPT_COMMAND
(assumendo che PROMPT_COMMAND
inizi con shell_session_history_check;
) in modo che venga eseguito solo sul primo prompt.
shell_session_history_allowed
è true per impostazione predefinita, quindi in pratica il comportamento reale sta chiamando 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
}
Questa funzione sovrascrive il valore predefinito di HISTFILE
( ~/.bash_history
) e imposta SHELL_SESSION_HISTORY
su 1
(true).
Quindi questa domanda si riduce a: Perché la cronologia viene salvata anche se HISTFILE
non è impostato su un nome file univoco?
Bene funziona ancora allo stesso modo. Una volta che la shell viene chiusa, si aggiunge a ~/.bash_history
. La differenza è che non hai file univoci che registrano ogni sessione .
Perché dovrei voler registrare file univoci per ogni sessione?
Dai un'occhiata a questo post Reddit :
(~/.bash_sessions/) is used to store HISTFILE's and .session files
that are unique to sessions. If $BASH_SESSION or $TERM_SESSION_ID is
set upon launching the shell (i.e. if Terminal is resuming from a
saved state), the associated HISTFILE is merged into the current one,
and the .session file is ran. Session saving is facilitated by means
of an EXIT trap being set for a function bash_update_session_state.
Essentially, this lays the groundwork for us to be able to extend
Terminal's session-resuming using our own rc files. By implementing
our own extension of bash_update_session_state, we can, say, add
functionality to the .session files that are run upon resume.