2 votes

Que fait shell_session_history_check dans la PROMPT_COMMAND par défaut ?

J'utilise le terminal sur MacOS High Sierra.

J'ai ajouté echo PROMPT_COMMAND au sommet de mon .bash_profile pour voir le défaut et j'ai obtenu :

'shell_session_history_check; update_terminal_cwd'


Je ne comprends pas bien ce que le shell_session_history_check le fait réellement. Je ne peux pas vraiment trouver de différence avec/sans (l'historique des coquilles fermées apparaît toujours dans la fenêtre history dans une nouvelle coquille).

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.

2voto

JBallin Points 8187

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.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X