Я використовую bash, і я хотів би уникати збереження деяких команд в історії.
- Чи можливо це зробити лише для наступної команди?
- Чи можна це робити протягом усього сеансу?
Я використовую bash, і я хотів би уникати збереження деяких команд в історії.
Відповіді:
і я просто згадав ще одну відповідь, ця є фактичною відповіддю на ваше запитання.
якщо у системі HISTCONTROL у вас "простор ігнорування", то bash не буде запам'ятати будь-який рядок, що починається з символу пробілу. він не з’явиться навіть у поточній історії оболонки, не кажучи вже про збереження до $ HISTFILE.
наприклад, я експортую HISTCONTROL = 'ignoreboth: erasedups' у своєму ~ / .bashrc
ось деталі зі сторінки bash man:
ІСТКОНТРОЛ Список значень, розділених двокрапкою, керує тим, якими є команди збережено у списку історії. Якщо список значень включає ігнорує простір, рядки, які починаються з символу пробілу, не є збережено у списку історії. Значення ігнорується викликає рядки відповідність попереднього запису історії не зберігається. Значення ignoreboth - це скорочення для простору ігнорування та ігнорування. Значення erasedups викликає всі попередні рядки, що відповідають поточному рядку для видалення зі списку історії до збереження цього рядка Будь-яке значення, яке не є у наведеному вище списку, ігнорується. Якщо HISTCONTROL є unset або не включає дійсне значення, всі рядки, прочитані аналізатор оболонки зберігається у списку історії, залежно від значення ІСТОРІЇ. Другий і наступні рядки багаторядкової складені команди не перевіряються і додаються в історію незалежно від значення HISTCONTROL.
Ось кілька уроків історії, які я навчився з googling:
Ви можете встановити історію, щоб ігнорувати певні рядки. У цьому прикладі я проігнорував команди ls, passwd та будь-яку команду з префіксом пробілу символів.
export HISTIGNORE = "ls: passwd:"
Щоб вимкнути історію вашого сеансу, ви можете:
експорт HISTSIZE = 0
Якщо ви просто хочете видалити останню команду з історії, ви можете натиснути Up-arrow, а потім Ctrl - U(стирати до початку рядка), а потім Up-arrowзнову.
Ви можете стерти будь-який окремий рядок із історії, як це. Просто скористайтеся стрілкою вгору або пошуком або будь-яким іншим, щоб перетворити поточний командний рядок, що редагується, потім натисніть Ctrl - U, а потім Up-arrowабо Down-arrowперейдіть до іншого рядка історії.
Я виявив це випадково один день років тому. Я поняття не маю, документально це чи ні.
Однак, як правило, менше клопотів просто не зберегти історію поточної оболонки за допомогою:
HISTFILE=/dev/null
Ви можете зняти HISTFILE
змінну. Від man bash
:
ІСТИНА Ім'я файлу, в якому збережена історія команд (див. HIS- TORY нижче). Значення за замовчуванням - ~ / .bash_history. Якщо не встановлено, історія команд не зберігається, коли інтерактивна оболонка виходи.
Я не думаю, що це не заважає команді з’являтися в локальній історії оболонки перед виходом оболонки.
Я бачу, що ніхто не писав цього методу, тому я буду.
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