Я использую bash и хотел бы избежать сохранения некоторых команд в истории.
- Возможно ли это сделать только для следующей команды?
- Возможно ли это сделать на протяжении всего сеанса?
Я использую bash и хотел бы избежать сохранения некоторых команд в истории.
Ответы:
и я только что вспомнил другой ответ, это фактический ответ на ваш вопрос.
если у вас есть «ignorespace» в HISTCONTROL, то bash не запомнит любую строку, начинающуюся с пробела. он не появится даже в истории текущей оболочки, не говоря уже о сохранении в $ HISTFILE.
например, у меня есть экспорт HISTCONTROL = 'ignoreboth: erasedups' в моем ~ / .bashrc
вот подробности со страницы руководства bash:
HISTCONTROL Разделенный двоеточиями список значений, управляющих тем, как команды сохранено в списке истории. Если список значений включает ignorespace, строки, начинающиеся с символа пробела, не являются сохраняется в списке истории. Значение ignoredups вызывает строки соответствие предыдущей записи истории, чтобы не быть сохраненным. Значение ignoreboth - это сокращение от ignorespace и ignoredups. Ценность erasedups вызывает все предыдущие строки, соответствующие текущей строке быть удаленным из списка истории перед сохранением этой строки. Любое значение, отсутствующее в приведенном выше списке, игнорируется. Если HISTCONTROL это не задано или не содержит допустимого значения, все строки считываются парсер оболочки сохраняется в списке истории, в зависимости от значения ИСТИНГОР. Вторая и последующие строки многострочного составные команды не тестируются, а добавляются в историю независимо от значения HISTCONTROL.
Вот несколько уроков по истории, которые я извлек из поиска в Google:
Вы можете установить историю, чтобы игнорировать определенные строки. В этом примере я проигнорировал команды ls, passwd и любую команду с префиксом символьного пространства.
export HISTIGNORE = "ls: passwd:"
Чтобы отключить историю для вашего сеанса, вы можете выполнить:
HISTSIZE экспорта = 0
Если вы просто хотите удалить последнюю команду из истории, тогда вы можете нажать Up-arrow, затем Ctrl - U(стереть в начало строки), затем Up-arrowснова.
Вы можете удалить любую отдельную строку из истории, как это. Просто используйте стрелку вверх или поиск или что-нибудь еще, чтобы сделать его текущей редактируемой командной строкой, затем нажмите Ctrl - U, а затем Up-arrowили, Down-arrowчтобы перейти к другой строке истории.
Я обнаружил это случайно один день назад. Я понятия не имею, документировано это или нет.
Однако, как правило, проще не сохранять историю текущей оболочки вообще с помощью:
HISTFILE=/dev/null
Вы можете сбросить HISTFILE
переменную. От man bash
:
HISTFILE Имя файла, в котором сохраняется история команд (см. HIS- Тори ниже). Значением по умолчанию является ~ / .bash_history. Если не установлено, история команд не сохраняется при использовании интерактивной оболочки выходы.
Я не думаю, что это препятствует появлению команды в локальной истории оболочки до ее закрытия.
Я вижу, что никто не написал этот метод, поэтому я буду.
history -d $((HISTCMD-1)) && history -d <command or number of command>
history -d
удаляет указанную запись из истории.
HISTCMD
сохраняет номер_команды команды, которая должна быть выполнена далее. Итак, (HISTCMD-1) относится к последней выполненной команде.
Я снял короткометражный фильм, который показывает, как он работает: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2
После запуска команды, а также потому, что она также удаляет саму команду, переход со стрелкой вверх не будет отображать команду, поэтому, если вы планируете использовать ее часто, лучше создать псевдоним:
alias hc='history -d $((HISTCMD-1)) && history -d $1'
Тогда вы можете сделать:
$ hc command