Почему bash не хранит команды, начинающиеся с пробелов?

49

Если я выполняю последовательность команд, таких как:

$ ls
$ grep abc file.txt

а затем используйте клавишу со стрелкой вверх, чтобы получить предыдущий, терминал покажет последний cmd (который grepздесь)

Но если я сделаю что-то вроде этого:

$ ls
$   grep abc file.txt

где grepпредшествует пробел, нажатие вверх дает ls, а не grep.

Почему это?

sandyp
источник
Продолжение
Жиль "ТАК - перестань быть злым"

Ответы:

53
echo $HISTCONTROL
ignoreboth

человек Баш:

HISTCONTROL

Список значений, разделенных двоеточиями, управляющий тем, как команды сохраняются в списке истории. Если список значений включает в себя ignorespace, строки, начинающиеся с пробела, не сохраняются в списке истории. Значение ignoredupsприводит к тому, что строки, соответствующие предыдущей записи истории, не будут сохранены. Значение ignorebothявляется сокращением для ignorespaceи ignoredups.

Хауке Лагинг
источник
3
и HISTCONTROLустанавливается ignorebothв значение по умолчанию, ~/.bashrcпредоставляемое по debianкрайней мере.
Стефан Шазелас
1
Какой вариант использования ignorespace?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
В Ubuntu 14.04 по умолчанию это ignorebothраздражает.
Ник Гэммон
6
Сиро, я полагаю, это так, что ты можешь вводить команду как echo "drop database mydb" | mysql -u root -pPasswordи не сохранять ее в истории.
Джереми
2
Для пользователей Mac HISTCONTROL ничего не установлен, поэтому вам нужно добавить его в свой bash_profile или аналогичный - unix.stackexchange.com/questions/115917/…
chrismarx