Этот вопрос, вероятно, следует перенести в ServerFault, поскольку это не «программирование», а «администратор сервера» - но спасибо за вопрос / ответ, именно то, что мне было нужно!
Эндрю Текен
Ответы:
295
Начните свою команду с пробела, и она не будет включена в историю.
Имейте в виду, что для этого требуется установить переменную среды $HISTCONTROL.
Убедитесь, что следующая команда возвращает ignorespaceили
ignoreboth
#> echo $HISTCONTROL
Чтобы добавить переменную среды, если она отсутствует, можно добавить следующую строку в профиль bash. Например%HOME/.bashrc
export HISTCONTROL=ignorespace
После выбора профиля снова пробел с префиксными командами не будет записан $HISTFILE
затем приступить к подлым делам. Установка значения для файлааты истории /dev/nullбудет записана в файл истории, однако эта запись будет легко удалена, и никакие следы (по крайней мере, в файле истории) не будут отображаться.
На это уже отвечали много раз. Что бы вы сказали, что ваш ответ добавляет к этой теме (кроме бесполезного шума)?
gniourf_gniourf
Он не был составлен в одном ответе , чтобы не отображать саму команду в истории и не отображать ничего, что было введено впоследствии.
Кристиан
1
Но теперь эта тема - настоящий беспорядок! в этом случае, особенно для такого старого вопроса, я считаю, что лучше отредактировать уже существующие хорошие ответы и / или оставить комментарий…
gniourf_gniourf
5
Как уже упоминалось в комментариях 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
Затем вы редактировали свою историю, и тот факт, что вы редактировали ее!
Попробовал это на: GNU bash, версия 3.2.57 (1) -релиз (x86_64-apple-darwin15), и он не работает. Команды, которые я использовал после неустановленной ИСТОРИИ, были сохранены в ~ / .bash_history
Кристиан
@Krystian Моя ошибка - я написал «unset HISTORY», когда она должна быть «unset HISTFILE» - исправлена. Это работает сейчас? Работает на GNU bash, версия 4.3.30 (1) -релиз (x86_64-pc-linux-gnu).
drkvogel
ну я не уверен. Простой тест: unset HISTFILE; echo TEST; historyдаст вам команду echo TESTот предыдущего до последнего. Хотя после завершения сеанса и повторного подключения история не имеет этой записи действительно. Так что я бы сказал, что это работает :)
Krystian
unset HISTFILEне останавливает запись команд в истории в памяти, но останавливает их запись в любом файле $ HISTFILE. Итак, я думаю, у вас все еще есть локальная история в памяти, но она больше не записывается в файл, а это то, что вы можете захотеть! ;)
drkvogel
4
Вы также можете использовать следующую команду:
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
sobi3ch
1
Извините, но я понимаю, что вам нужно создать функцию вместо псевдонима, потому что кавычки меняют значение $sи другие вещи в sed. function forget() { // put code here // }
sobi3ch
3
Если вы используете 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более подробную информацию).
Это отключает историю для всех будущих команд, а не для отдельной команды. Большинство людей, которые приходят сюда, должны смотреть на принятый ответ.
tripleee
Это верно или хорошо, но не полностью. Пока мы добавляем обратную команду set -x history, она работает.
Абдилла
0
Эта команда может пригодиться. Это не будет записывать команду, которая выполняется
Ответы:
Начните свою команду с пробела, и она не будет включена в историю.
Имейте в виду, что для этого требуется установить переменную среды
$HISTCONTROL
.Убедитесь, что следующая команда возвращает
ignorespace
илиignoreboth
Чтобы добавить переменную среды, если она отсутствует, можно добавить следующую строку в профиль bash. Например
%HOME/.bashrc
После выбора профиля снова пробел с префиксными командами не будет записан
$HISTFILE
источник
В любой сессии Bash установите файл истории в / dev / null, набрав:
Обратите внимание, что, как указано в комментариях, это не запишет никаких команд в этом сеансе в историю!
Просто не связывайтесь с тяжелой работой вашего системного администратора, пожалуйста;)
Решение Doodad является более элегантным. Просто сбросьте переменную:
unset HISTFILE
(спасибо!)источник
/dev/null
разрешениями, установленными на 0600 при выходе. Вместо этого я использовалunset HISTFILE
.источник
Расширение ответа @John Doe & @ user3270492. Но, похоже, это работает для меня.
Вы не должны видеть запись команды в своей истории.
Вот объяснение ..
'History -d' удаляет упомянутую запись из истории.
HISTCMD хранит номер_команды того, который должен быть выполнен следующим. Итак, (HISTCMD-1) относится к последней выполненной команде.
Удалить определенную строку из файла истории Bash
источник
Вы можете рассмотреть возможность использования оболочки без истории, как, возможно,
(возможно
/bin/dash
или/bin/sash
может быть более подходящим, чем/bin/sh
)или даже лучше использовать пакетную утилиту, например
История будет содержать
sh
илиbatch
не очень значимымисточник
Вы можете начать сеанс с
затем приступить к подлым делам. Установка значения для файлааты истории
/dev/null
будет записана в файл истории, однако эта запись будет легко удалена, и никакие следы (по крайней мере, в файле истории) не будут отображаться.Кроме того, это непостоянно.
источник
Как уже упоминалось в комментариях Doodad ,
unset HISTFILE
это прекрасно, но если вы также хотите удалить некоторую историю, сделайте так,echo $HISTFILE
чтобы получить местоположение файла истории (обычно~/.bash_history
)unset HISTFILE
, и отредактировать~/.bash_history
(или как тамHISTFILE
было - конечно, теперьunset
вы можете читать это).Затем вы редактировали свою историю, и тот факт, что вы редактировали ее!
источник
unset HISTFILE; echo TEST; history
даст вам командуecho TEST
от предыдущего до последнего. Хотя после завершения сеанса и повторного подключения история не имеет этой записи действительно. Так что я бы сказал, что это работает :)unset HISTFILE
не останавливает запись команд в истории в памяти, но останавливает их запись в любом файле $ HISTFILE. Итак, я думаю, у вас все еще есть локальная история в памяти, но она больше не записывается в файл, а это то, что вы можете захотеть! ;)Вы также можете использовать следующую команду:
Я думаю, что это очень портативная команда.
источник
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, вы можете запустить:
После этого каждая команда начинается с пробела будет исключена из истории.
Вы можете использовать псевдонимы в ,
.zshrc
чтобы превратить это вкл / выкл :источник
Есть несколько способов добиться этого. Это устанавливает размер файла истории равным 0:
Это устанавливает файл истории
/dev/null
, эффективно отключая его:Для отдельных команд вы можете поставить перед командой пробел, и она не будет сохранена в файле истории. Обратите внимание, что для этого необходимо, чтобы вы
ignorespace
включили значение в$HISTCONTROL
переменную окружения (man bash и ищитеignorespace
более подробную информацию).источник
Это удобно, если вы хотите стереть всю историю, включая тот факт, что вы стерли всю историю!
источник
Вам просто нужно запустить:
$ set +o history
Чтобы увидеть больше, запустите:
$ man set
источник
set -x history
, она работает.Эта команда может пригодиться. Это не будет записывать команду, которая выполняется
источник