Pourquoi bash ne stocke-t-il pas les commandes commençant par des espaces?

49

Si j'exécute une séquence de commandes comme:

$ ls
$ grep abc file.txt

puis utilisez la flèche du haut pour obtenir le précédent, le terminal affichera le dernier cmd (qui est le grepici)

Mais si je fais quelque chose comme ça:

$ ls
$   grep abc file.txt

grepest précédé par des espaces, en appuyant en haut donne ls, pas grep.

Pourquoi est-ce?

sandyp
la source
Suivi: Pourquoi bash a-t-il une option HISTCONTROL = ignorespace?
Gilles 'SO- arrête d'être méchant'

Réponses:

53
echo $HISTCONTROL
ignoreboth

homme bash:

HISTCONTROL

Liste de valeurs séparées par des deux-points contrôlant la manière dont les commandes sont enregistrées dans la liste d'historique. Si la liste de valeurs comprend ignorespace, les lignes commençant par un caractère d'espacement ne sont pas enregistrées dans la liste d'historique. Une valeur de ignoredupsprovoque l'enregistrement des lignes correspondant à l'entrée d'historique précédente. Une valeur de ignorebothest un raccourci pour ignorespaceet ignoredups.

Hauke ​​Laging
la source
3
et HISTCONTROLest réglé sur ignorebothla valeur ~/.bashrcpar défaut fournie par debianau moins.
Stéphane Chazelas
1
Quel est le cas d'utilisation de ignorespace?
Ciro Santilli a rejoint le forum
1
Dans Ubuntu 14.04, la valeur par défaut ignorebothest un peu gênante.
Nick Gammon
6
Ciro, je suppose que c'est pour que vous puissiez entrer une commande comme echo "drop database mydb" | mysql -u root -pPasswordet ne pas l'enregistrer dans l'historique.
Jeremy
2
Pour les utilisateurs de Mac, HISTCONTROL n’est paramétré sur rien, vous devez donc l’ajouter à votre profil bash ou similaire - unix.stackexchange.com/questions/115917/…
chrismarx