Допустим, я выполнил команду с помощью zsh
echo "mysecret" > file
Я могу легко распечатать историю, включая номера записей, с помощью команды fc -l
:
1 echo "mysecret" >| file
Но как мне легко удалить запись из истории?
Я не могу найти соответствующий абзац в man zshbuiltins .
Ответы:
* BSD / Дарвин (macOS):
Linux (GNU sed):
Это приведет к удалению всех строк, соответствующих слову "porn" из вашего $ HISTFILE.
С помощью
setopt HIST_IGNORE_SPACE
, вы можете добавить к указанной выше команде пробел, чтобы предотвратить ее запись в $ HISTFILE.Как Тим указал в своем комментарии ниже , префикс LC_ALL = C предотвращает сбой «недопустимой последовательности байтов».
источник
sed -i '' '/S3_SECRET/d' $HISTFILE
. В Linux это не сработает. stackoverflow.com/questions/5694228/…LC_ALL=C sed -i '' '/S3_SECRET/d' $HISTFILE
stackoverflow.com/questions/11287564/…Я не знаю, есть ли какой-нибудь элегантный метод для этого, но в аналогичных ситуациях я выходил из системы (позволяя zsh очистить свой буфер и записывать мою историю в файл), затем вошел в систему и, наконец, вручную отредактировал
~/.zsh_history
, удалив " опасная "линия".источник
HISTFILE=/dev/null
, или просто используйте другую оболочку. Еслиzsh
это оболочка входа в систему, войдите иexec sh
затем отредактируйте~/.zhistory
.~/.zsh_history
, а затем перезапустить zsh.Если вы используете опцию HIST_IGNORE_SPACE в zsh, вы можете добавлять команды с пробелом "", и они не будут сохранены в файле истории. Если у вас есть секретные команды, которые вы обычно используете, вы можете сделать что-нибудь вроде: alias hiddencommand = 'hiddencommand' .
источник
setopt histignorespace
свой~/.zshrc
histignorespace
. Очень полезно !Эта функция удалит любую строку, которую вы хотите, из вашей истории Zsh, без вопросов:
# Accepts one history line number as argument. # Alternatively, you can do `dc -1` to remove the last line. dc () { # Prevent the specified history line from being saved. local HISTORY_IGNORE="${(b)$(fc -ln $1 $1)}" # Write out the history to file, excluding lines that match `$HISTORY_IGNORE`. fc -W # Dispose of the current history and read the new history from file. fc -p $HISTFILE $HISTSIZE $SAVEHIST # TA-DA! print "Deleted '$HISTORY_IGNORE' from history." }
Если вы хотите дополнительно запретить запись всех
dc
команд в историю, добавьте в свой~/.zshrc
файл следующее:zshaddhistory() { [[ $1 != 'dc '* ]] }
Обновить
Я опубликовал более комплексное решение в виде плагина: https://github.com/marlonrichert/zsh-hist
источник
В bash :
1- в терминальном типе bash
hsitory
# Это перечислит все команды в файле history .bash_history с номерами строкпример:
2- выберите номер строки CMD, которую вы хотите удалить
history -d 988
Примечание: если вы хотите удалить, например, последние 3 CMD, просто выберите номер третьей строки снизу, например: 988, и повторите CMD
history -d 988
3 раза подряд.Источник
источник
history -d
не работает в ZSH, потому что это всего лишь псевдоним дляfc -l 1
и заканчиваетсяfc: event not found: -d
ошибкой.