4 votos

La pestaña de terminal de MacOS Catalina no recuerda sus propios comandos anteriores

He actualizado de El Capitan a Catalina recientemente; cuando hago clic en en cualquier pestaña de la terminal solía alternar los comandos anteriores ejecutados dentro de esa pestaña específica solamente, pero ahora mostrará los comandos para todas las pestañas lo cual es muy molesto

¿Existe algún ajuste para solucionarlo?

0 votos

¿Estás usando Zsh o Bash? Escriba echo $SHELL o echo $0

0 votos

Si estás usando Zsh querrás Desactivar las opciones del historial detalladas en esta respuesta

0 votos

@mzoz : A ficha no recuerda nada. El shell lo hace. Puedes configurar zsh para tener un historial común o un historial separado para cada proceso interactivo de zsh.

6voto

Joel Puntos 112

Tu pregunta se refiere a cómo el shell mantiene su historial de comandos. Al cambiar de El Capitan a Catalina, es posible que también haya cambiado su shell por defecto de bash a zsh y estos shells tienen diferentes valores por defecto para mantener su historial de comandos. Esta respuesta asume que su pregunta es para alterar el comportamiento del zsh historial de comandos.

Tienes al menos dos opciones:

  1. Restaurar bash como su caparazón:

    % chsh -s /bin/bash

    Esto se puede cambiar fácilmente si se decide volver a zsh :

    chsh -s /bin/zsh
  2. Configurar zsh para desactivar la "agregación" de los historiales de comandos véase APPEND_HISTORY

    Desde man zshoptions :

    APPEND_HISTORIA
    Si se establece esto, las sesiones de zsh añadirán su lista de historial al archivo de historial, en lugar de reemplazarlo. Así, múltiples sesiones zsh paralelas tendrán todas las nuevas entradas de sus listas de historial añadidas al fichero de historial, en el orden en que salgan. El fichero seguirá siendo reescrito periódicamente para recortarlo cuando el número de líneas crezca un 20% por encima del valor especificado por $SAVEHIST (véase también la opción HIST_SAVE_BY_COPY).

    En consecuencia, si desea seguir utilizando zsh como su cáscara, puede deshacer el APPEND_HISTORY y los historiales de comandos de sus diferentes terminales/shells no se agregarán en un único historial.

    Puede comprobar qué opciones están activadas o desactivadas de la siguiente manera:

    % setopt
    ...
    # lists options that are set
    
    % unsetopt
    ...
    # lists options that are unset
    
    % set -o
    ...
    # lists all options w/ off/on status 

    NOTA: setopt sólo imprime las opciones no activadas por defecto. La opción APPEND_HISTORY está activada por defecto - como designa el <D> visto en el extracto de la página de manual anterior.

    Ahora bien, esto es un poco obtuso (al menos para la OMI), pero fíjate en que hay una opción que aparece en el unsetopt salida nombrada noappendhistory . Esto se explica en el Documentación sobre las opciones de zsh de la siguiente manera:

    En la siguiente lista, las opciones establecidas por defecto en todas las emulaciones están marcadas ; las establecidas por defecto sólo en las emulaciones csh, ksh, sh o zsh están marcadas , , , según corresponda. Al listar las opciones (mediante 'setopt', 'unsetopt', 'set -o' o 'set +o'), los que están activados por defecto aparecen en la lista con el prefijo "no". . Por lo tanto (a menos que KSH_OPTION_PRINT esté configurado), 'setopt' muestra todas las opciones cuya configuración se ha modificado con respecto a la predeterminada.

    (énfasis mío)

    Todo se reduce a esto: la opción para darle el comportamiento que desea se establece de la siguiente manera:

    setopt noappendhistory

    Añade este comando a tu ~/.zshrc utilizando su editor favorito. Una vez hecho esto, source este archivo de la siguiente manera:

    % . ~/.zshrc 
    -- OR --
    % source ~/.zshrc

4voto

Joel Puntos 112

Esta respuesta supone que la pregunta se refiere al comportamiento del historial de comandos función en zsh .

Creo que hay que hacer dos puntualizaciones antes de proponer una respuesta:

  1. Información disponible en línea para zsh a menudo se refiere a un "configuración por defecto" . En lo que respecta a MacOS, el zsh "configuración por defecto" puede diferir de la descrita en otras fuentes. El "Configuración por defecto de MacOS" es el zsh "configuración por defecto" modificado por /etc/zshrc . Es mejor revisar este archivo antes de hacer cambios, Y todos los cambios deben hacerse en el usuario local ~/.zshrc archivo.
  2. Ayuda (a mí al menos) a entender que la cáscara puede mantener dos (2) historiales de comandos . Uno es un archivo histórico (por defecto: ~/.zsh_history ), el otro es un historial de sesiones que se almacena en la memoria para cada sesión. Los parámetros SAVEHIST y HISTSIZE determinar la profundidad del archivo histórico y el historial de sesiones respectivamente. Esto puede resultar confuso, y la siguiente figura, aunque no es técnicamente exacta, puede ayudar a entender el concepto.

Para cada sesión hay un único historial de sesiones . Sin embargo, sólo hay (por defecto) un historial de archivos para todas las sesiones. Bajo la configuración por defecto de MacOS (ref. /etc/zshrc ): HISTSIZE=2000 , SAVEHIST=1000 . Cuando se inicia una nueva sesión, el historial de sesiones está vacía. Sin embargo, suponiendo que el historial de archivos no está vacío, pulsando la tecla de flecha hacia arriba ( ) revelará los comandos emitidos desde otras sesiones. A medida que pasa el tiempo - a medida que se emiten comandos en esta nueva sesión - su historial de sesiones comenzará a rellenar los comandos introducidos en esta nueva sesión. Después de que se hayan emitido, por ejemplo, 20 comandos, la flecha hacia arriba ( ) revelará esos 20 comandos; la siguiente pulsación de la flecha hacia arriba revelará la última entrada en el historial de archivos .

enter image description here

En resumen: En un nueva sesión bajo la configuración por defecto de MacOS ( HISTSIZE=2000 , SAVEHIST=1000 ) su historial de comandos se extrae del archivo histórico , es decir, de la historiales de sesiones de otras sesiones. A medida que se emiten más comandos en esta nueva sesión, estos comandos de la sesión "empujarán" los comandos del archivo histórico hacia abajo en la pila.

Según entiendo su pregunta, no desea que su historiales de sesiones a co-mezclar . Es decir, para cualquier sesión, no quiere ver ningún historial de comandos de otra sesión - de la archivo histórico . Después de leer lo anterior, si este es el comportamiento que quieres, aquí hay una manera de hacerlo:

Propuesta de respuesta: Fijar SAVEHIST=0 y HISTSIZE=2000

Abrir el archivo ~/.zshrc en su editor, y añada las dos líneas siguientes que anulan los valores por defecto de MacOS:

SAVEHIST=0
HISTSIZE=2000

SAVEHIST=0 impedirá que cualquier sesión guarde su historial en el archivo histórico . Cada sesión tendrá un historial de comandos consistente únicamente en su único historial de sesiones . Las teclas de flecha arriba y abajo ( , ) lo hará nunca mostrar un comando de otra sesión porque en lo que respecta a la sesión actual, ese historial no existe. Los efectos secundarios potencialmente indeseables de esta opción son:

  • las nuevas sesiones no tienen historial de comandos

  • si una sesión se cierra o termina, historial de comandos se pierde, pero véase la nota 4 a continuación.

Si tiendes a mantener las sesiones abiertas durante largos periodos de tiempo (como hago yo), podrías establecer HISTSIZE a un valor mayor para posponer la "poda" cuando el historial alcance el 120% de su asignación (2.400 comandos en este caso).

Si desea conservar el archivo histórico , zsh proporciona una gran número de opciones para controlar cómo el archivo histórico y historial de sesiones se mantienen, y cómo interactúan entre sí para presentar su historial de comandos . Además, el fc comandos son de cáscara empotrados que permiten manipular el historial de comandos ( ver también: 1 , 2 , 3 ). Además de las opciones propias de zsh existen numerosas herramientas de terceros dedicadas a la historial de comandos incluso un herramienta que almacena el historial de comandos y otros datos relacionados en una base de datos relacional . Yo resumiría diciendo: "El historial de comandos del shell sufre de un vergüenza de la riqueza ."


Notas:

  1. Tenga en cuenta que el nombre ~/.zsh_history no es un estándar para zsh - es simplemente el nombre de archivo que Apple ha elegido.

  2. Apple define sus valores por defecto para zsh en el archivo /etc/zshrc . Es instructivo revisarlos, pero probablemente sea mejor hacer cambios en los valores predeterminados dentro de su archivo de configuración local en ~/.zshrc .

  3. HISTFILE , HISTSIZE y SAVEHIST están cubiertos en el zshparam manuales

    HISTFILE (de man 1 zshparam ) El archivo en el que se guarda el historial cuando se sale del shell interactivo. Si no se establece, el historial no se guarda.

    HISTSIZE (de man zshparam ) El número máximo de eventos almacenados en la lista del historial interno.

    SAVEHIST (de man zshparam ) El número máximo de eventos del historial a guardar en el archivo del historial.

  4. El fc comandos son de cáscara empotrados que permiten manipular el historial de comandos ( ver también: 1 , 2 , 3 ).

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