Избегайте держать команду в истории

Я использую 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. Если не установлено,
         история команд не сохраняется при использовании интерактивной оболочки
         выходы.

Я не думаю, что это препятствует появлению команды в локальной истории оболочки до ее закрытия.

Я иногда делаю

export HISTFILE=/dev/null
Другие вопросы по тегам