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


33

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

  • Возможно ли это сделать только для следующей команды?
  • Возможно ли это сделать на протяжении всего сеанса?

Обратите внимание, что если цель состоит в том, чтобы скрыть пароли в аргументах командной строки, они все равно будут видны через ps
Benitok

Ответы:


36

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

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

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

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

HISTCONTROL
  Разделенный двоеточиями список значений, управляющих тем, как команды
  сохранено в списке истории. Если список значений включает
  ignorespace, строки, начинающиеся с символа пробела, не являются
  сохраняется в списке истории. Значение ignoredups вызывает строки
  соответствие предыдущей записи истории, чтобы не быть сохраненным. Значение
  ignoreboth - это сокращение от ignorespace и ignoredups. Ценность
  erasedups вызывает все предыдущие строки, соответствующие текущей строке
  быть удаленным из списка истории перед сохранением этой строки.
  Любое значение, отсутствующее в приведенном выше списке, игнорируется. Если HISTCONTROL это
  не задано или не содержит допустимого значения, все строки считываются
  парсер оболочки сохраняется в списке истории, в зависимости от значения
  ИСТИНГОР. Вторая и последующие строки многострочного
  составные команды не тестируются, а добавляются в историю
  независимо от значения HISTCONTROL.

1
+1 за космический трюк: D
petrus

19

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

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

export HISTIGNORE = "ls: passwd:"

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

HISTSIZE экспорта = 0

Ссылка


7

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

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

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

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

HISTFILE=/dev/null

3

Вы можете сбросить HISTFILEпеременную. От man bash:

  HISTFILE
         Имя файла, в котором сохраняется история команд (см. HIS-
         Тори ниже). Значением по умолчанию является ~ / .bash_history. Если не установлено,
         история команд не сохраняется при использовании интерактивной оболочки
         выходы.

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



1

Я вижу, что никто не написал этот метод, поэтому я буду.

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.