Dlaczego bash nie przechowuje poleceń rozpoczynających się spacjami?


48

Jeśli wykonam sekwencję poleceń, takich jak:

$ ls
$ grep abc file.txt

a następnie użyj klawisza strzałki w górę, aby uzyskać poprzedni, terminal pokaże ostatnie cmd (które jest greptutaj)

Ale jeśli zrobię coś takiego:

$ ls
$   grep abc file.txt

gdzie greppoprzedza się spacjami, naciśnięcie w górę daje ls, a nie grep.

Dlaczego to?


Odpowiedzi:


52
echo $HISTCONTROL
ignoreboth

bash człowieka:

HISTCONTROL

Rozdzielona dwukropkami lista wartości kontrolujących sposób zapisywania poleceń na liście historii. Jeśli lista wartości zawiera ignorespace, wiersze rozpoczynające się znakiem spacji nie są zapisywane na liście historii. Wartość ignoredupspowoduje, że wiersze pasujące do poprzedniego wpisu historii nie zostaną zapisane. Wartość ignorebothjest skrótem dla ignorespacei ignoredups.


3
i HISTCONTROLjest ustawiony ignorebothna domyślnie ~/.bashrcpodany przez debianco najmniej.
Stéphane Chazelas

1
Jaki jest przypadek użycia ignorespace?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
W Ubuntu 14.04 domyślnie jest ignorebothto trochę denerwujące.
Nick Gammon

6
Ciro, zakładam, że możesz wprowadzać polecenia jak echo "drop database mydb" | mysql -u root -pPasswordi nie zapisywać ich w historii.
Jeremy

2
Dla użytkowników komputerów Mac HISTCONTROL nie jest ustawiony na nic, więc musisz dodać go do swojego bash_profile lub podobnego - unix.stackexchange.com/questions/115917/…
chrismarx
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.