Избегайте держать команду в истории
Я использую bash и хотел бы избежать сохранения некоторых команд в истории.
- Возможно ли это сделать только для следующей команды?
- Возможно ли это сделать на протяжении всего сеанса?
6 ответов
И я только что вспомнил другой ответ, это фактический ответ на ваш вопрос.
если у вас есть "ignorespace" в HISTCONTROL, то bash не запомнит любую строку, начинающуюся с пробела. он не появится даже в истории текущей оболочки, не говоря уже о сохранении в $HISTFILE.
например, у меня есть экспорт HISTCONTROL='ignoreboth:erasedups' в моем ~/.bashrc
вот подробности со страницы руководства bash:
HISTCONTROL Список значений, разделенных двоеточиями, управляющий тем, как команды сохраняются в списке истории. Если в списке значений есть пробел игнорирования, строки, начинающиеся с пробела, не сохраняются в списке истории. Значение ignoredups приводит к тому, что строки, соответствующие предыдущей записи истории, не сохраняются. Значение ignoreboth является сокращением для ignorespace и ignoredups. Значение erasedups приводит к тому, что все предыдущие строки, соответствующие текущей строке, удаляются из списка истории перед сохранением этой строки. Любое значение, отсутствующее в приведенном выше списке, игнорируется. Если HISTCONTROL не установлен или не содержит допустимого значения, все строки, прочитанные синтаксическим анализатором оболочки, сохраняются в списке истории при условии значения HISTIGNORE. Вторая и последующие строки многострочной составной команды не тестируются и добавляются в историю независимо от значения HISTCONTROL.
Вот несколько уроков по истории, которые я извлек из поиска в Google:
Вы можете установить историю, чтобы игнорировать определенные строки. В этом примере я проигнорировал команды ls, passwd и любую команду с префиксом символьного пространства.
export HISTIGNORE = "ls: passwd:"
Чтобы отключить историю для вашего сеанса, вы можете выполнить:
HISTSIZE экспорта =0
Если вы просто хотите удалить последнюю команду из истории, вы можете нажать стрелку вверх, затем Ctrl - U (стереть в начало строки), а затем снова стрелку вверх.
Вы можете удалить любую отдельную строку из истории, как это. Просто используйте стрелку вверх или поиск или что-то еще, чтобы сделать его текущей редактируемой командной строкой, затем нажмите Ctrl - U, а затем стрелку вверх или стрелку вниз, чтобы перейти к другой строке истории.
Я обнаружил это случайно один день назад. Я понятия не имею, документировано это или нет.
Однако, как правило, проще не сохранять историю текущей оболочки вообще с помощью:
HISTFILE=/dev/null
Я вижу, что никто не написал этот метод, поэтому я буду.
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
Вы можете сбросить HISTFILE
переменная. От man bash
:
HISTFILE Имя файла, в котором сохраняется история команд (см. HIS- Тори ниже). Значением по умолчанию является ~/.bash_history. Если не установлено, история команд не сохраняется при использовании интерактивной оболочки выходы.
Я не думаю, что это препятствует появлению команды в локальной истории оболочки до ее закрытия.