shell_session_history_check
appelle shell_session_history_enable
qui crée un fichier journal unique pour chaque session du shell.
_NOTE : shell_session_history_check
est une fonction spécifique au Mac._
Faisons le point.
$ 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
}
La dernière if/else
supprime shell_session_history_check
de la PROMPT_COMMAND
(en supposant que votre PROMPT_COMMAND
commence par shell_session_history_check;
) afin qu'il ne s'exécute qu'à la première invite.
shell_session_history_allowed
est vrai par défaut, donc le comportement réel est d'appeler 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
}
Cette fonction écrase le fichier valeur par défaut de HISTFILE
( ~/.bash_history
) et définit le SHELL_SESSION_HISTORY
à 1
(vrai).
Donc cette question se résume à : Pourquoi l'historique est-il sauvegardé même si HISTFILE
n'est pas réglé sur un nom de fichier unique ?
Eh bien, il fonctionne toujours de la même manière. Une fois que le shell sort, il ajoute à ~/.bash_history
. La différence est que vous n'avez pas de fichiers uniques pour enregistrer chaque session .
Pourquoi voudrais-je que des fichiers uniques enregistrent chaque session ?
Regarde ça Poste de rédacteur :
(~/.bash_sessions/) est utilisé pour stocker les fichiers HISTFILE et .session. qui sont uniques aux sessions. Si le paramètre $BASH_SESSION ou $TERM_SESSION_ID est au lancement de l'interpréteur de commandes (c'est-à-dire si Terminal reprend à partir d'un état état sauvegardé), le HISTFILE associé est fusionné avec le fichier courant, et le fichier .session est exécuté. La sauvegarde de la session est facilitée par d'un piège EXIT défini pour une fonction bash_update_session_state.
Essentiellement, cela jette les bases pour que nous puissions étendre les services de la reprise de session de Terminal en utilisant nos propres fichiers rc. En implémentant notre propre extension de bash_update_session_state, nous pouvons, disons, ajouter aux fichiers .session qui sont exécutés lors de la reprise.
0 votes
D'où vient cette fonction ? Elle n'est pas fournie avec bash. Et que signifie votre premier paragraphe ? C'est une citation de quelque part ? Où ?
0 votes
Mise à jour du 1er paragraphe. C'est une fonction spécifique au Mac.