Чи є спосіб запобігти доданню команди до вашої історії?


65

Чи є спосіб запобігти доданню команди до вашої історії? У мене є команда, яку я хочу зберігати поза своїм історіальним файлом, і мені дуже байдуже, щоб вона була там, коли я шукаю історію, збережену в пам'яті, хоча це менше турбує. Чи є спосіб запобігти це чи мені просто потрібно повернутися назад і відредагувати свій історіальний файл.

оновлення: я не розумів, що це може бути специфічно для оболонки. Моя оболонка є zsh. Ви можете відповісти за інші снаряди, щоб люди знали, як це зробити у своїй оболонці.


перехресне посилання на відповідь zsh: superuser.com/questions/352788/…
Michael Shigorin

Відповіді:


52

У ЗШ :

Спочатку вставте setopt HIST_IGNORE_SPACEдо свого ~/.zshrc. Тепер, коли ви знову ввійдете в систему, ви можете префіксувати будь-які команди, які ви не хочете зберігати в історії за допомогою space.

У посібнику користувача наступні 3 варіанти можна сказати, що певні рядки взагалі не повинні входити в історію:

  • HIST_IGNORE_SPACE не зберігає команди з префіксом пробілу
  • HIST_NO_STORE не зберігає команду history ( fc -l )
  • HIST_NO_FUNCTIONS не зберігає визначення функцій

будь-який шанс @mmckinst відповідь працює в zsh? чи щось подібне? або, можливо, будь-яка команда, що включає команду| somecommand
xenoterracide

AFAIK не існує еквівалента ІСТИЧНОГО БАШУ в zsh.
собачка

@xeno zsh забезпечує функцію гачка, preexecяку можна використовувати для цього. Якщо він повертається не нульовим, команда не зберігається в історії.
Кіт

1
для того, щоб zsh ігнорував купу основних загальних команд, я зв'язав їх з усіма, щоб перед ними було пробіл ... для c (ls fg bg jobs exit clear reset); робити псевдонім $ c = "$ c"; виконано
Буде Норріс

4
Для ледачих майбутніх читачів, як я, які ще не знають, як це зробити: setopt HIST_IGNORE_SPACEв~/.zshrc
Al.G.

25

Якщо ви виконуєте команду знову і знову, можливо, ви захочете використовувати функцію ігнорування історії оболонки. Скажімо, у вас є secret.server.com, на який ви прихиляєтесь, файли FTP і т. Д., Що ви не хочете, щоб жодна рядок, що згадує про secret.server.com, збережений:

У bashвас би встановили

HISTIGNORE="*secret.server.com*"

тоді як в zshпараметрі викликається

HISTORY_IGNORE="*secret.server.com*"

Ви можете перелічити декілька візерунків з двокрапкою. Зверніть увагу, що кожен шаблон узгоджується з повним рядком введення , тому вам може знадобитися включити *. Наприклад, наступне буде виключено fortuneз історії, але збереже fortune -l:

HISTIGNORE="*secret.server.com*:ytalk*:fortune"
HISTORY_IGNORE="*secret.server.com*:ytalk*:fortune"

Якщо встановити HISTIGNORE, нічого, що відповідає шаблонам, які ви перераховуєте, не буде збережено в .bash_history/ .zsh_historyі навіть клавіша зі стрілкою вгору, яка зазвичай нагадує попередню команду, не працюватиме, якщо вона відповідає вашому шаблону.


3
якийсь шанс це працює в zsh?
ксенотеррацид

Чи є можливість ігнорувати лише рядки, починаючи з фортуни. Щось як HISTIGNORE="^fortune*"ігнорувати, fortune -lале тримати myfortune?
Бернхард

@xenoterracide Це так, але параметр названий інакше. Я щойно відредагував це у відповідь.
n.st

23

У bash використовуйте HISTCONTROLзмінну.

Встановіть його на HISTCONTROL=ignorespace(або HISTCONTROL=ignoreboth). Відтепер, коли ви починаєте рядок з пробілом , він не збережеться в історії. Це дозволяє увімкнути команду, яку не потрібно розкривати, у якийсь файл конфігурації.

Навіть так, трапляється забути додати простір, а потім хочеться повернутися назад. Щоб видалити запис в історії, використанні history -d <index>, з indexчислом знайдених за допомогою historyкоманди (перша колонка).


1
Це працює в zsh?
Герт

11

Найпростіший спосіб для одноразового - це

$ $SHELL
$$ unset HISTFILE
$$ secret-command
$$ exit
$

де $представляє підказку початкової оболонки і $$представляє підказку нижньої оболонки . Це працює в bash і zsh; в ksh вам потрібно HISTFILE=/notwritable. Зауважте, що важливим є значення, HISTFILEколи пишеться файл історії, а не коли команда виконується. Bash, ksh та zsh записують у файл історії при виході (zsh може це робити частіше залежно від конфігурації).

Крім того, ви можете отримати bash або zsh, щоб ігнорувати лінії, що відповідають певним шаблонам (це вже охоплено іншими відповідями).

Ще одна можливість в zsh є

% fc -p
% secret-command
% fc -P

fc -pвисуває поточний список історії на стек і запускає новий, який не пов’язаний з файлом збереження. fc -Pспливаючі вікна, які зберегли історію, списують стек і взагалі забувають про неї.

Поки процес працює, команда та її аргументи (а також у деяких системах і їх середовище) відображатимуться в таблиці процесів ( psвихід). Корінь може бачити минулі команди в базі даних системного обліку і може робити більше журналів без вашого контролю. І, ймовірно, будуть всілякі криміналістичні докази, які можуть приблизно показати, яку команду ви виконували (наприклад, час зміни файлів). Таким чином, ви не отримаєте конфіденційність проти рішучих підслуховувачів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.