Уникайте збереження командування в історії


33

Я використовую bash, і я хотів би уникати збереження деяких команд в історії.

  • Чи можливо це зробити лише для наступної команди?
  • Чи можна це робити протягом усього сеансу?

Зауважте, що якщо мета - приховати паролі в аргументах командного рядка, вони все одно будуть видні через ps
Benitok

Відповіді:


36

і я просто згадав ще одну відповідь, ця є фактичною відповіддю на ваше запитання.

якщо у системі HISTCONTROL у вас "простор ігнорування", то bash не буде запам'ятати будь-який рядок, що починається з символу пробілу. він не з’явиться навіть у поточній історії оболонки, не кажучи вже про збереження до $ HISTFILE.

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

ось деталі зі сторінки bash man:

ІСТКОНТРОЛ
  Список значень, розділених двокрапкою, керує тим, якими є команди
  збережено у списку історії. Якщо список значень включає
  ігнорує простір, рядки, які починаються з символу пробілу, не є
  збережено у списку історії. Значення ігнорується викликає рядки
  відповідність попереднього запису історії не зберігається. Значення
  ignoreboth - це скорочення для простору ігнорування та ігнорування. Значення
  erasedups викликає всі попередні рядки, що відповідають поточному рядку
  для видалення зі списку історії до збереження цього рядка
  Будь-яке значення, яке не є у наведеному вище списку, ігнорується. Якщо HISTCONTROL є
  unset або не включає дійсне значення, всі рядки, прочитані
  аналізатор оболонки зберігається у списку історії, залежно від значення
  ІСТОРІЇ. Другий і наступні рядки багаторядкової
  складені команди не перевіряються і додаються в історію
  незалежно від значення HISTCONTROL.

1
+1 за космічний трюк: D
петрус

19

Ось кілька уроків історії, які я навчився з googling:

Ви можете встановити історію, щоб ігнорувати певні рядки. У цьому прикладі я проігнорував команди 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:

  ІСТИНА
         Ім'я файлу, в якому збережена історія команд (див. HIS-
         TORY нижче). Значення за замовчуванням - ~ / .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.