¿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:

  • No se puede encontrar el ^ símbolo en el keyboard
  • Cómo mapear las teclas de medios para "salto corto" en vlc?
  • ¿Puedo cambiar algunas, pero no todas, las teclas de function del keyboard de Apple (dim vs F1, shiny vs F2)?
  • ¿Es posible hacer que el background del terminal esté en vivo?
  • No se puede cambiar el layout del keyboard
  • "Es un error de directory" en bash
  • 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?

  • mkdir: /Users/me/.bash_sessions: Permiso denegado
  • Fuente utilizada en OS X 'Yosemite' Versión del icono de la Terminal?
  • Hacer que la window activa sea más obvia en OSX
  • Diseño diferente de keyboards
  • ¿Puede sudo usar mis alias existentes?
  • Establecer diacríticos rumanos usando AltGr en El Capitan
  • 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).