2 votos

¿Qué hace shell_session_history_check en el PROMPT_COMMAND por defecto?

Estoy usando terminal en MacOS High Sierra.

He añadido echo PROMPT_COMMAND a la cima de mi .bash_profile para ver el valor por defecto y tengo:

'shell_session_history_check; update_terminal_cwd'


No comprendo del todo lo que el shell_session_history_check realmente lo hace. Realmente no puedo encontrar una diferencia con/sin ella (la historia de las conchas cerradas todavía aparecen en history en un nuevo caparazón).

0 votos

¿De dónde viene esa función? No viene con bash. ¿Y qué significa tu primer párrafo? ¿Es una cita de algún sitio? ¿De dónde?

0 votos

Actualizado el primer párrafo. Es una función específica de Mac.

2voto

JBallin Puntos 71

shell_session_history_check llama a shell_session_history_enable 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 desglosarlo.

$ 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 la PROMPT_COMMAND (suponiendo que su PROMPT_COMMAND comienza con shell_session_history_check; ) para que sólo se ejecute en el primer aviso.

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

Así que esta pregunta se reduce a: ¿Por qué se guarda el historial aunque HISTFILE no está configurado con un nombre de archivo único?

Pues sigue funcionando igual. Una vez que el intérprete de comandos sale, se anexa a ~/.bash_history . La diferencia es que no tiene archivos únicos que registren cada sesión .

¿Por qué querría archivos únicos para registrar cada sesión?

Mira esto Publicación en Reddit :

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

Esencialmente, esto sienta las bases para que podamos extender la reanudación de sesión de Terminal utilizando nuestros propios archivos rc. Al implementar nuestra propia extensión de bash_update_session_state, podemos, por ejemplo, añadir a los archivos .session que se ejecutan al reanudar la sesión.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X