Por que o bash não armazena comandos que começam com espaços?

48

Se eu executar uma sequência de comandos como:

$ ls
$ grep abc file.txt

e depois use a tecla de seta para cima para obter a anterior, o terminal mostrará o último cmd (que é o grepaqui)

Mas se eu fizer algo assim:

$ ls
$   grep abc file.txt

onde grepé precedido por espaços, pressionar para cima dá ls, não grep.

Por que é isso?

sandyp
fonte
Acompanhamento: Por que o bash tem uma opção HISTCONTROL = ignorespace?
Gilles 'SO- stop be evil'

Respostas:

52
echo $HISTCONTROL
ignoreboth

festança do homem:

HISTCONTROL

Uma lista de valores separados por dois pontos que controla como os comandos são salvos na lista de histórico. Se a lista de valores incluir ignorespace, as linhas que começam com um caractere de espaço não são salvas na lista de histórico. Um valor de ignoredupsfaz com que as linhas correspondentes à entrada do histórico anterior não sejam salvas. Um valor de ignorebothé uma abreviação de ignorespacee ignoredups.

Hauke ​​Laging
fonte
3
e HISTCONTROLé definido como ignorebotho padrão ~/.bashrcfornecido por debianpelo menos.
Stéphane Chazelas
1
Qual é o caso de uso ignorespace?
Ciro Santilli escreveu
1
No Ubuntu 14.04, o padrão é o ignorebothque é meio irritante.
Nick Gammon
6
Ciro, presumo que seja para que você possa digitar um comando como esse echo "drop database mydb" | mysql -u root -pPassworde não salvá-lo no histórico.
Jeremy
2
Para usuários de mac, o HISTCONTROL não está definido para nada, então você precisará adicioná-lo ao seu perfil de bash ou similar - unix.stackexchange.com/questions/115917/…
chrismarx