¿Por qué bash no almacena comandos que comienzan con espacios?

48

Si realizo una secuencia de comandos como:

$ ls
$ grep abc file.txt

y luego use la tecla de flecha hacia arriba para obtener la anterior, el terminal mostrará el último cmd (que es el grepaquí)

Pero si hago algo como esto:

$ ls
$   grep abc file.txt

donde grepestá precedido por espacios, presionando arriba da ls, no grep.

¿Por qué es esto?

sandyp
fuente
Seguimiento: ¿Por qué bash tiene una opción HISTCONTROL = ignorespace?
Gilles 'SO- deja de ser malvado'

Respuestas:

52
echo $HISTCONTROL
ignoreboth

hombre bash:

HISTCONTROL

Una lista de valores separados por dos puntos que controlan cómo se guardan los comandos en la lista del 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 del historial. Un valor de ignoredupshace que las líneas que coinciden con la entrada del historial anterior no se guarden. Un valor de ignorebothes taquigrafía para ignorespacey ignoredups.

Hauke ​​Laging
fuente
3
y HISTCONTROLse establece ignorebothen el valor predeterminado ~/.bashrcproporcionado por debianal menos.
Stéphane Chazelas
1
¿Cuál es el caso de uso ignorespace?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
En Ubuntu 14.04, el valor predeterminado ignorebothes algo molesto.
Nick Gammon
66
Ciro, supongo que es para que puedas ingresar un comando como echo "drop database mydb" | mysql -u root -pPasswordy no tenerlo guardado en el historial.
Jeremy
2
Para usuarios de mac, HISTCONTROL no está configurado para nada, por lo que deberá agregarlo a su bash_profile o similar - unix.stackexchange.com/questions/115917/…
chrismarx