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


31

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


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

Ответы:


53

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

HISTIGNORE='rm *:svn revert*'

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


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 и его вариантах, не уверен, работает ли он на всех системах.


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
Тодд Уолтон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.