¿Por qué Mac Terminal restring dos commands consecutivos cuando son iguales?

Empecé a usar Mac recientemente y antes solía trabajar en Ubuntu.

Supongamos que ejecuto estos commands uno por uno en mi terminal:

  • ¿Cómo puedo eliminar Firefox usando terminal?
  • Sincroniza preferences de aplicaciones entre múltiples Mac
  • ¿Puedo ejecutar con security aplicaciones de command-line en modo de usuario único?
  • ¿Por qué el command cp es 4 veces más lento que copyr en Finder en OS X 10.6?
  • Cómo volver a remapear la tecla 'Menú contextual' en el keyboard externo?
  • Diseño del keyboard para matemáticas
  • python3 main.py python3 main2.py python3 main2.py python3 main2.py python3 main2.py python3 main2.py python3 main2.py 

    Ahora supongamos que quiero ejecutar python main.py nuevamente, así que haré clic en la tecla de arriba. Tendré que hacer clic en la tecla solo dos veces en Ubuntu, pero 7 veces en Mac.

    Si dos commands consecutivos son iguales, entonces el terminal debería recordar solo un command en lugar de recordar dos commands diferentes.

    ¿Cómo puedo hacer que esto suceda en macOS?

  • ¿Cuánto time tarda en recargarse el cargador de batería AA de Apple?
  • ¿Cómo puedo cambiar un command y las asociaciones de teclas del cursor globalmente?
  • ¿Puedo usar la Terminal para encontrar todas las tags OpenMeta en mi sistema?
  • ¿Hay alguna manera de limpiar discos posiblemente no válidos que solo aparecen en Mac OS Recovery a través de 'diskutil list' en Terminal? ¿La recuperación los usa?
  • Intercambia permanentemente las teclas de opción y command en un keyboard que no sea de Apple
  • Acceso directo para hacer una nueva window en Safari
  • 2 Solutions collect form web for “¿Por qué Mac Terminal restring dos commands consecutivos cuando son iguales?”

    Necesita agregar la variable de entorno HISTCONTROL a su .bash_profile . En su .bash_profile agregue la siguiente línea:

     export HISTCONTROL=ignoreboth:erasedups 

    Cierra y reinicia tu session bash y los engañados deberían haber desaparecido. Alternativamente, podría ejecutar esa misma línea y tendrá efecto para esa session (úselo para probarlo).


    Desde la página del manual para bash (en Terminal):

    HISTCONTROL
    Una list de valores separados por dos puntos que controla cómo se guardan los commands en la list de historial. Si la list de valores incluye ignorespacio , las líneas que comienzan con un carácter de espacio no se guardan en la list de historial. Un valor de ignonetworkingups hace que las líneas que coincidan con la input del historial anterior no se guarden. Un valor de ignoreboth es la abreviatura de ignorespace e ignonetworkingups . Un valor de borrados hace que todas las líneas anteriores que coincidan con la línea actual se eliminen de la list del historial antes de que se guarde esa línea. Cualquier valor que no esté en la list de arriba es ignorado. Si HISTCONTROL no está configurado, o no incluye un valor válido, todas las líneas leídas por el analizador de shell se guardan en la list de historial, sujeto al valor de HISTIGNORE . La segunda y siguientes líneas de un command compuesto de varias líneas no se testingn, y se agregan al historial independientemente del valor de HISTCONTROL .

    ¿Por qué pasó esto?

    MacOS y Ubuntu están configurados de manera diferente para manejar duplicates en el historial de commands de bash. Estas configuraciones se almacenan en una serie de los denominados " files de puntos ". Estos toman la forma de ~ / .bash * y del sistema / etc / profile. Todos estos files pueden personalizarse a su gusto y diferenciar entre conchas interactivas, shells de inicio de session, shells remotos, etc. Estos files se leen en un order específico y cumplen funciones específicas.

    ¿Cómo get el mismo comportamiento en macOS?

    Si solo desea esta personalización única de "ignorar duplicates exactos de líneas de command", puede elegir algo como la respuesta de Allan, es decir, agregar una sola línea, por ejemplo, a su file bash_profile. No hay "el path correcto", sino innumerables opciones.

    En caso de que esta no sea la única personalización para tu bash, esta podría no ser la mejor opción:

    • ~/.bash_profile debe ser súper simple y solo cargar .profile y .bashrc (en ese order)

    • ~ / .profile tiene las cosas que NO están específicamente relacionadas con bash, como las variables de entorno (PATH y amigos)

    • ~ / .bashrc tiene todo lo que quieras en una línea de command interactiva. Símbolo del sistema, variable EDITOR, alias bash para mi uso

    Algunas otras notas:

    • Todo lo que debería estar disponible para aplicaciones gráficas O para sh (o bash invocado como sh) DEBE estar en ~ / .profile
    • ~ / .bashrc no debe dar salida a nada
    • Todo lo que debería estar disponible solo para iniciar session debe ir en ~ / .profile
    • Asegúrese de que ~ / .bash_login no exista.

    Eso significa que, cuando las cosas se vuelven más complejas, es una buena idea distribuir las personalizaciones en múltiples files, cada uno de ellos especializado y altamente orderado en sus contenidos:

    Todas las exports pueden residir en su propio file para una supervisión simplificada.

    Cree un file que sea leído por bash en la raíz de su directory de usuario, por ejemplo llamado .exports que contiene:

     # Omit duplicates and commands that begin with a space from history. export HISTCONTROL='ignoreboth'; 

    Esto debe ser "de origen" para que el file sea leído por bash en el inicio interactivo:

    Sourcing de files
    Si tiene muchas configuraciones de shell, puede dividirlas en varios subfiles y usar el builtin de origen para cargarlos desde su .bashrc: agregando source ~/.exports a él.

    Alternativamente, para asegurar que los files realmente existan antes de la carga

     if [ -f ~/.exports ]; then . ~/.exports fi 

    El command . ~/.exports generará ~/.exports en el context del shell actualmente en ejecución.

    Esto es particularmente útil para agregar alias, el file separado hace que sea más fácil volver a cargarlos cuando realiza cambios.

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).