Как предотвратить появление команд в истории bash?
иногда, когда я запускаю команд rm -rf XYZ
, Я не хочу, чтобы это было записано в истории bash, потому что я могу случайно запустить ту же команду снова reverse-i-search
. Есть ли хороший способ предотвратить это?
7 ответов:
если вы выберите
HISTCONTROL
переменные средыignoreboth
(который обычно установлен по умолчанию), команды с ведущим пробелом не будут сохраняться в истории (а также дубликаты).например:
$ HISTCONTROL=ignoreboth $ echo test1 $ echo test2 $ history | tail -n2 1015 echo test1 1016 history | tail -n2
вот что
man bash
говорит:HISTCONTROL
разделенный двоеточием список значений, управляющих сохранением команд в списке истории. Если список значений включает
ignorespace
, строки, начинающиеся с пробела, не сохраняются в списке истории. Значениеignoredups
приводит к тому, что строки, соответствующие предыдущей записи истории, не сохраняются. Значениеignoreboth
является сокращением дляignorespace
иignoredups
. Значениеerasedups
вызывает удаление всех предыдущих строк, соответствующих текущей строке, из списка истории до сохранения этой строки. Любое значение не в приведенном выше списке игнорируется. ЕслиHISTCONTROL
Не задано или не содержит допустимого значения, все строки прочитанные синтаксическим анализатором оболочки сохраняются в списке истории, в зависимости от значенияHISTIGNORE
. Вторая и последующие строки многострочной составной команды не тестируются, а добавляются в историю независимо от значенияHISTCONTROL
.Читайте также:
в вашей .bashrc/.файл/куда хочешь, поставить
export HISTIGNORE=' *'
. Затем просто начните любую команду, которую вы хотите игнорировать, с одним пробелом.$ ls # goes in history $ ls # does not
еще лучше использовать
HISTIGNORE
. Это позволяет указать набор шаблонов, которые будут игнорироваться (например,rm
). Лучше (я думаю), чем просто трубить всю историю в/dev/null
kill -9 $$
Я знаю, что это не так хорошо, как указано выше, но это убьет текущую оболочку bash без сохранения чего - либо, полезно, когда HISTCONTROL не установлен по умолчанию, вы забыли установить его или просто забыли поставить ведущее пространство, и вы просто набрали некоторые пароли и не хотите, чтобы они постоянно оставались в истории, это быстрый способ, что-то вроде стирания файла истории не так хорошо, потому что вам нужно сделать это за пределами оболочки сохранения истории (войдите в систему как другой пользователь и использование Су/судо, создавая фоновое задание и т. д.)
при запуске оболочки я явно очищаю историю от записей, которые я не хочу там быть. Например, я не хочу
rm -rf
в истории (это травма после удаления каталога, полного результатов, обработанных в одночасье, только с однимArrow-Up
+Enter
:)я помещаю следующий фрагмент в мой init-файл (работает с
.zshrc
, также должны работать с.bashrc
)# ... HISTFILE=~/.zshhistory # ... # remove dangerous entries from the shell history temp_histfile="/tmp/$$.temp_histfile" grep -v -P '^rm .*-rf' $HISTFILE > $temp_histfile mv $temp_histfile $HISTFILE