10 votos

¿Por qué Mac Terminal recuerda dos comandos consecutivos cuando son iguales?

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

Supongamos que ejecutar estos comandos uno por uno en mi terminal:

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 de nuevo, así que voy a haga clic en la tecla de arriba. Necesito haga clic en la tecla arriba sólo dos veces en Ubuntu pero 7 veces en Mac.

Si dos consecutivos, los comandos son los mismos, entonces la terminal debe recordar sólo un comando en lugar de recordar dos órdenes diferentes.

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

14voto

Douglas Puntos 10417

Usted necesita agregar el HISTCONTROL variable de entorno a su .bash_profile. En su .bash_profile añadir la siguiente línea:

export HISTCONTROL=ignoreboth:erasedups

Cierre y reinicie su sesión de bash y los incautos debería haber desaparecido. Alternativamente, usted puede ejecutar en la misma línea y tendrá efecto para que la sesión (se uso para probarlo).


Desde la página de manual de bash(en el Terminal):

HISTCONTROL
Un colon lista de valores separados control del modo de comandos se guardan en la lista de historial. Si la lista de valores incluye ignorespace, las líneas que comienzan con un carácter de espacio no se guardan en la lista de historial. Un valor de ignoredups causas de las líneas que coincidan con la historia anterior de la entrada a no ser salvo. Un valor de ignoreboth es la abreviatura de ignorespace y ignoredups. Un valor de erasedups hace que todos los anteriores, las líneas que coincidan con la línea actual para ser removido de la lista de la historia antes de que la línea es guardado. Cualquier valor no está en la lista de arriba es ignorado. Si HISTCONTROL no está definida, o no contiene un valor válido, todas las líneas de lectura por el shell analizador se guardan en la lista de la historia, sujeto a que el valor de HISTIGNORE. En la segunda y subsiguientes líneas de un multi-línea de comando compuesto no están probados, y se agregan a la historia, independientemente del valor de HISTCONTROL.

4voto

Pickle Puntos 2099

¿Por qué sucede esto?

MacOS y Ubuntu se configuran de manera diferente fuera de la caja para manejar los duplicados en bash historial de comandos. Estas configuraciones se almacenan en un número de los llamados "dot-files". Estos toman la forma de ~/.bash* como bien de todo el sistema en /etc/profile. Todos estos archivos pueden ser personalizados a su gusto y a diferenciar entre interactivo conchas, shells de inicio de sesión remoto, conchas , etc. Estos archivos son leídos en un orden específico y sirven a funciones específicas.

Cómo tener el mismo comportamiento que en macOS?

Si desea que sólo este, solo la adaptación de "ignorar duplicados exactos de las líneas de comando" usted puede ir con algo así como el de Allan respuesta, es decir, añadir una sola línea, por ejemplo, su archivo bash_profile. No es "la forma correcta", pero un sinnúmero de opciones.

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

Algunas otras notas:

  • Algo que debe estar disponible para aplicaciones gráficas O sh (o bash invoca como sh) DEBE estar en ~/.perfil
  • ~/.bashrc no debe de salida de la nada
  • Algo que debería estar disponible sólo para los shells de inicio de sesión debe ir en ~/.perfil
  • Asegúrese de que ~/.bash_login no existe.

Eso significa que, cuando las cosas se ponen más complejo es buena idea para difundir a cabo la personalización de los textos en varios archivos, cada uno de ellos especializado y muy ordenado en su contenido:

Todos los exports puede residir en su propio archivo para la simplificación de la supervisión.

Crear un archivo que se lee por bash en la root de su directorio de usuario, por ejemplo llamado .exports que contiene:

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

Este tiene que ser "de origen" para que el archivo es leído por bash interactivo de inicio:

Abastecimiento de archivos
Si usted tiene un montón de shell configuraciones, es posible que desee dividir a cabo en varias sub-carpetas y el uso de la fuente incorporada a la carga de su .bashrc: con la adición de source ~/.exports .

Como alternativa, para asegurarse de que los archivos realmente existe antes de la carga

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

El comando . ~/.exports serán de origen ~/.exports en el contexto de la actualmente en ejecución shell.

Esto es particularmente útil para añadir alias, el archivo independiente hace que sea más fácil para volver a cargar cuando se hacen cambios.

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