Назад | Перейти на главную страницу

Избегайте сохранения команд в истории

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

и я только что вспомнил другой ответ, это фактический ответ на ваш вопрос.

если у вас есть «ignorespace» в HISTCONTROL, то bash не запомнит ни одну строку, начинающуюся с символа пробела. он не появится даже в истории текущей оболочки, не говоря уже о сохранении в $ HISTFILE.

например у меня есть export HISTCONTROL = 'ignoreboth: erasedups' в моем ~ / .bashrc

вот подробности со страницы руководства bash:

HISTCONTROL
  A colon-separated list of values controlling how commands are
  saved on the history list.  If the list of values includes
  ignorespace, lines which begin with a space character are not
  saved in the history list.  A value of ignoredups causes lines
  matching the previous history entry to not be saved.  A value of
  ignoreboth is shorthand for ignorespace and ignoredups.  A value
  of erasedups causes all previous lines matching the current line
  to be removed from the history list before that line is saved.
  Any value not in the above list is ignored.  If HISTCONTROL is
  unset, or does not include a valid value, all lines read by the
  shell parser are saved on the history list, subject to the value
  of HISTIGNORE.  The second and subsequent lines of a multi- line
  compound command are not tested, and are added to the history
  regardless of the value of HISTCONTROL.

Вот несколько уроков истории, которые я извлек из гугла:

Вы можете настроить историю, чтобы игнорировать определенные строки. В этом примере я проигнорировал команды ls, passwd и любые команды с префиксом пробела.

экспорт HISTIGNORE = "ls: passwd:"

Чтобы отключить историю вашего сеанса, вы можете выполнить:

экспорт HISTSIZE = 0

Ссылка

Если вы просто хотите удалить последнюю команду из истории, вы можете нажать Стрелка вверх, с последующим Ctrl - U (стереть до начала строки), затем Стрелка вверх очередной раз.

Вы можете стереть любую отдельную строку из истории вот так. Просто используйте стрелку вверх или поиск или что-то еще, чтобы сделать текущую редактируемую командную строку, затем нажмите Ctrl - U, а потом Стрелка вверх или Стрелка вниз перейти на другую строку истории.

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

В целом, однако, проще не сохранять историю текущей оболочки вообще с помощью:

HISTFILE=/dev/null

Вы можете отключить HISTFILE переменная. Из man bash:

  HISTFILE
         The name of the file in which command history is saved (see HIS-
         TORY below).  The default value is ~/.bash_history.   If  unset,
         the  command  history  is  not  saved  when an interactive shell
         exits.

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

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

export HISTFILE=/dev/null

Вижу, что этот метод никто не писал, так что напишу.

history -d $((HISTCMD-1)) && history -d <command or number of command>

history -d удаляет указанную запись из истории.

HISTCMD сохраняет command_number команды, которая будет выполнена следующей. Итак, (HISTCMD-1) относится к последней выполненной команде.

После запуска команды и поскольку она также удаляет саму команду, то при поднятии стрелки вверх команда не будет отображаться, поэтому, если вы планируете использовать это часто, было бы лучше создать псевдоним:

alias hc='history -d $((HISTCMD-1)) && history -d $1'

Тогда вы сможете:

$ hc command