Я хочу виконати деякі команди, але не хочу зберігати їх в історії команд. Так що ніхто не зможе шукати його у .bash_history
файлі.
Чи є спосіб, як виконати команди bash таким чином?
Я хочу виконати деякі команди, але не хочу зберігати їх в історії команд. Так що ніхто не зможе шукати його у .bash_history
файлі.
Чи є спосіб, як виконати команди bash таким чином?
Відповіді:
Почніть команду з пробілу, і вона не буде включена в історію.
Майте на увазі, що для цього потрібна установка змінної середовища $HISTCONTROL
.
Перевірте, ignorespace
чи повертається наступна команда або
ignoreboth
#> echo $HISTCONTROL
Щоб додати змінну середовища, якщо вона відсутня, наступний рядок можна додати до профілю bash. Напр%HOME/.bashrc
export HISTCONTROL=ignorespace
Після пошуку профілю знову місця, префіксні команди не записуються $HISTFILE
У будь-якому даному сеансі Bash встановіть файл історії в / dev / null, ввівши:
export HISTFILE=/dev/null
Зауважте, що, як зазначено в коментарях, це команда не записує жодних команд на цьому сеансі в історію!
Просто не возиться з наполегливою роботою вашого адміністратора;)
Рішення Doodad є більш елегантним. Просто зніміть змінну: unset HISTFILE
(спасибі!)
/dev/null
дозволів 0600 при виході. Натомість я використав unset HISTFILE
.
Розширення відповіді @John Doe & @ user3270492 Але, здається, це працює для мене.
<your_secret_command>; history -d $((HISTCMD-1))
Ви не повинні бачити запис команди у своїй історії.
Ось пояснення ..
"Історія -d" видаляє згаданий запис з історії.
HISTCMD зберігає командний номер того, який буде виконуватися далі. Отже, (HISTCMD-1) посилається на останню виконану команду.
Ви можете розглянути можливість використання оболонки без історії, як, можливо,
/bin/sh << END
your commands without history
END
(можливо, /bin/dash
або /bin/sash
може бути більш доречним, ніж /bin/sh
)
або навіть краще скористатися пакетною утилітою
batch << EOB
your commands
EOB
Тоді історія містила б, sh
або batch
що не має великого значення
Ви можете розпочати сеанс з
export HISTFILE=/dev/null ;history -d $(history 1)
потім приступайте до своїх підступних дій. Якщо встановити історіал, /dev/null
він буде записаний у файл історії, проте цей запис буде легко видалений, і сліди (принаймні у файлі історії) не відображатимуться.
Також це непостійно.
Як згадував Doodad у коментарях , unset HISTFILE
це робиться чудово, але якщо ви також хочете також видалити деяку історію, зробіть, echo $HISTFILE
щоб отримати місце розташування файлу історії (як правило ~/.bash_history
) unset HISTFILE
, і відредагуйте ~/.bash_history
(або що б там не HISTFILE
було - звичайно, це зараз, unset
щоб ви могли " т прочитати).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
Тоді ви відредагували свою історію та факт, що ви її редагували!
unset HISTFILE; echo TEST; history
дасть вам команду echo TEST
як попередню до останньої. Хоча після припинення сеансу та підключення знову історія не має цього запису. Тому я б сказав, що це працює :)
unset HISTFILE
Схоже, не припиняє, щоб команди записувалися в історію в пам'ять, але вони припиняють їх записувати в будь-який файл $ HISTFILE. Тож я здогадуюсь, що у вас все ще є пам’ять у краєзнавстві, але вона вже не записується у файл, що ви можете хотіти! ;)
Ви також можете використовувати таку команду:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Я думаю, що це дуже портативна команда.
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"
і тепер Ви можете зробити щось подібне:mysql -uroot -pSecretPassword ; forget
$s
та інші речі в sed. function forget() { // put code here // }
Якщо ви використовуєте zsh, ви можете запустити:
setopt histignorespace
Після цього буде встановлено, що кожна команда, що починається з пробілу, буде виключена з історії.
Ви можете використовувати псевдоніми в , .zshrc
щоб перетворити це вкл / викл :
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
Існує кілька способів цього досягти. Це встановлює розмір файлу історії 0:
export HISTFILESIZE=0
Це встановлює файл історії /dev/null
, фактично вимикаючи його:
export HISTFILE=/dev/null
Для окремих команд можна префіксувати команду пробілом, і вона не буде збережена у файлі історії. Зауважте, що для цього потрібно, щоб ignorespace
значення було включено до $HISTCONTROL
змінної середовища (man bash та пошук ignorespace
додаткових відомостей).
Вам просто потрібно запустити:
$ set +o history
Щоб побачити більше, запустіть:
$ man set
set -x history
згодом додаємо команду зворотного ходу , вона працює.