Я хочу выполнить некоторые команды, но не хочу их хранить в истории команд. Чтобы никто не смог выполнить поиск в файле .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
Обратите внимание, что, как указано в комментариях, это не будет записывать какие-либо команды в этом сеансе в историю!
Просто не возитесь с тяжелой работой вашего sysadmin, пожалуйста;)
[UPDATE] Решение @Doodad более элегантно, просто отключите переменную: unset HISTFILE
(спасибо!)
echo "discreet";history -d $(history 1)
Расширение @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
будет записана в файл истории, однако эта запись будет легко удалена, и никакие следы (по крайней мере, в файле истории) не будут показаны.
Кроме того, это непостоянно.
Вы также можете использовать следующую команду:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Я думаю, что это очень портативная команда
Как уже упоминалось @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
Затем вы отредактировали свою историю и тот факт, что вы ее отредактировали!
Есть несколько способов добиться этого. Это устанавливает размер файла истории в 0:
export HISTFILESIZE=0
Это устанавливает файл истории в /dev/null
, эффективно отключая его:
export HISTFILE=/dev/null
Для отдельных команд вы можете префикс команды с пробелом, и он не будет сохранен в файле истории. Обратите внимание, что для этого требуется значение ignorespace
, включенное в переменную среды $HISTCONTROL
(man bash и поиск ignorespace
).
Это удобно, если вы хотите удалить всю историю, включая тот факт, что вы удалили всю историю!
rm .bash_history;export HISTFILE=/dev/null;exit
Если вы используете 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."'
Эта команда может пригодиться. Это не будет записывать команду, которая выполняется
история -d $ ((HISTCMD-1)) &&
Вам просто нужно запустить: $ set +o history
Чтобы увидеть больше, запустите: $ man set