Cosa fa shell_session_history_check nel predefinito PROMPT_COMMAND?

0

Sto usando un terminale su MacOS High Sierra.

Ho aggiunto echo PROMPT_COMMAND all'inizio del mio .bash_profile per vedere il valore predefinito e ho ottenuto:

'shell_session_history_check; update_terminal_cwd'

Non comprendo appieno ciò che fa effettivamente shell_session_history_check . Non riesco davvero a trovare una differenza con / senza di essa (la cronologia delle shell chiuse viene ancora visualizzata in history in una nuova shell).

    
posta JBallin 18.06.2018 - 21:00
fonte

1 risposta

0

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.

    
risposta data 18.06.2018 - 21:00
fonte

Leggi altre domande sui tag