Исключение сохранения некоторых команд из истории bash

31

Есть ли способ , чтобы исключить такие команды , как rm -rf, svn revertот того , получать хранится в Баш истории? На самом деле, я по ошибке выдал их несколько раз, хотя у меня нет намерения делать это, просто потому, что я делаю вещи быстро, и это произошло. Следовательно, это приводит к потере большого количества работы, которую я проделал до сих пор.

Рави Гупта
источник
3
Вы можете быть заинтересованы в serverfault.com/questions/48769/…
Luc M

Ответы:

53

Вы можете захотеть $HISTIGNORE: «Список шаблонов, разделенных двоеточиями, который используется для определения того, какие командные строки следует сохранить в списке истории». Эта строка в вашем ~ / .bashrc должна выполнить эту работу:

HISTIGNORE='rm *:svn revert*'

Кроме того, вы можете добавить пробел в начале команды, чтобы исключить ее из истории. Это работает до тех пор, пока $HISTCONTROLсодержит ignorespaceили ignoreboth, что по умолчанию в любом дистрибутиве, который я использовал.

l0b0
источник
4
Пространство - это то, как я всегда это делал.
Роб
Раньше я случайно вводил дополнительные y, после всех cp(с псевдонимом cp -i) переходов. Так что я псевдоним yкак alias y='$(history | awk '"'"'END{if(NF==2 && $2=="y"){print "history -d " $1}}'"'"')'... Но HISTIGNOREэто лучший способ, как это выглядит. :) Благодарность.
Anishsane
2
Просто чтобы быть более явным: вы можете добавить export HISTCONTROL="ignorespace"к своему ~/.bashrcигнорировать команды, которые начинаются с пробелов.
Эйдан Фельдман
@AidanFeldman не используется по умолчанию в macOS
akauppi
ПРИМЕЧАНИЕ: пробел должен быть включен, когда мы вводим в командной строке, а не в HISTIGNORE.
Гаян Виракутти
6

Хотя это немного отличается от вопроса OP, когда я намеренно не хочу, чтобы команда сохранялась в истории bash, я ставлю перед ними пробел. Работает в Ubuntu и его вариантах, не уверен, работает ли он на всех системах.

k4rtik
источник
6
Зависит от $HISTCONTROL(см. Мой ответ).
10
@ l0b0 правильно, спасибо за указание.
k4rtik
1

Я обычно убиваю свой bash-экземпляр, когда делаю вещи, которые мне не нужны в истории.

kill -9 $$

$$ представляет текущий процесс - bash, когда вы запускаете его из оболочки. Вы можете использовать $ BASHPID, но это больше печатать :-)

Командир Кин
источник
2
Некоторые настройки Bash (например, такие ) сохраняют историю после каждой команды, и в этом случае это не сработает.
l0b0
1
Я делал это но настройка HISTFILE=/dev/nullявляется лучшим вариантом.
Anishsane
просто HISTFILE=работает как в bash, так и в ksh.
kubanczyk
илиunset HISTFILE
Тодд Уолтон