Я хочу выполнить некоторые команды, но не хочу сохранять их в истории команд. Так что никто не сможет найти его в .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))
Вы не должны видеть запись команды в своей истории.
Вот объяснение ..
'History -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
, она работает.