Как предотвратить появление команд в истории 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