¿Qué hace shell_session_history_check en el PROMPT_COMMAND predeterminado?

0

Estoy usando el terminal en MacOS High Sierra.

Agregué echo PROMPT_COMMAND a la parte superior de mi .bash_profile para ver el valor predeterminado y obtuve:

'shell_session_history_check; update_terminal_cwd'

No entiendo completamente lo que realmente hace shell_session_history_check . Realmente no puedo encontrar una diferencia con / sin él (el historial de shells cerradas aún se muestra en history en una shell nueva).

    
pregunta JBallin 18.06.2018 - 21:00

1 respuesta

0

shell_session_history_check llama a shell_session_history_enable , lo 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 descomponerlo.

$ 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 PROMPT_COMMAND (asumiendo que su PROMPT_COMMAND comienza con shell_session_history_check; ) para que solo se ejecute en el primer indicador.

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 predeterminado de HISTFILE ( ~/.bash_history ) y establece el SHELL_SESSION_HISTORY en 1 (verdadero).

Entonces, esta pregunta se reduce a: ¿Por qué se guarda el historial a pesar de que HISTFILE no tiene un nombre de archivo único?

Bueno, todavía funciona de la misma manera. Una vez que el shell se cierra, se agrega a ~/.bash_history . La diferencia es que no tiene archivos únicos que registran cada sesión .

¿Por qué querría que los archivos únicos registren cada sesión?

Echa un vistazo a esta publicación de Reddit :

  

(~ / .bash_sessions /) se utiliza para almacenar archivos HISTFILE y .session   que son exclusivos de las sesiones. Si $ BASH_SESSION o $ TERM_SESSION_ID es   establecer al iniciar el shell (es decir, si el terminal se está reanudando desde un   estado guardado), el HISTFILE asociado se fusiona con el actual,   y se ejecuta el archivo .session. El ahorro de sesión se facilita mediante   de una captura EXIT que se establece para una función bash_update_session_state.

     

Esencialmente, esto sienta las bases para que podamos extender   La sesión del terminal se reanuda utilizando nuestros propios archivos rc. Implementando   nuestra propia extensión de bash_update_session_state, podemos, digamos, agregar   Funcionalidad para los archivos .session que se ejecutan en el currículum.

    
respondido por el JBallin 18.06.2018 - 21:00

Lea otras preguntas en las etiquetas