Выполнить команду, не сохраняя ее в истории - PullRequest
176 голосов
/ 12 декабря 2011

Я хочу выполнить некоторые команды, но не хочу сохранять их в истории команд.Чтобы никто не смог найти его в файле .bash_history.

Есть ли способ выполнить команды bash таким образом?

Ответы [ 13 ]

260 голосов
/ 12 декабря 2011

Запустите вашу команду с пробелом, и она не будет включена в историю.

Помните, что для этого требуется установить переменную окружения $HISTCONTROL.

  • Убедитесь, что следующая команда возвращает ignorespace или ignoreboth

    #> echo $HISTCONTROL
    
  • Чтобы добавить переменную среды, если она отсутствует, в профиль bash можно добавить следующую строку,Например, %HOME/.bashrc

    export HISTCONTROL=ignorespace
    

После получения профиля снова пробелы с префиксами не будут записываться в $HISTFILE

50 голосов
/ 12 декабря 2011

В любом данном сеансе bash установите файл истории в / dev / null, набрав:

export HISTFILE = / dev / null

Обратите внимание, что, как указано в комментариях, это не запишет никаких команд в этом сеансе в историю!

Только не связывайтесь с тяжелой работой вашего сисадмина, пожалуйста;)

[ОБНОВЛЕНИЕ] @ Решение Doodad более элегантно, просто сбросьте переменную: unset HISTFILE (спасибо!)

31 голосов
/ 04 ноября 2015
echo "discreet";history -d $(history 1)
15 голосов
/ 19 мая 2016

Расширение ответа @John Doe & @ user3270492. Но, похоже, это работает для меня.

<your_secret_command>; history -d $((HISTCMD-1))

Вы не должны видеть запись команды в своей истории.

Вот объяснение ..

'history -d' удаляет упомянутую запись из истории.

HISTCMD хранит номер_команды следующего для выполнения. Итак, (HISTCMD-1) относится к последней выполненной команде.

https://superuser.com/a/529193

10 голосов
/ 12 декабря 2011

Вы можете рассмотреть возможность использования оболочки без истории, например

/bin/sh << END
   your commands without history
END

(возможно, /bin/dash или /bin/sash может быть более подходящим, чем /bin/sh)

или даже лучше.используйте утилиту batch , например,

batch << EOB
   your commands
EOB

История будет содержать sh или batch, что не очень важно

7 голосов
/ 02 января 2018

Вы можете начать сеанс с

export HISTFILE=/dev/null ;history -d $(history 1)

тогда продолжайте свои подлые дела. Установка для файла истории значения /dev/null будет записана в файл истории, однако эта запись будет легко удалена, и никакие следы (по крайней мере, в файле истории) не будут отображаться.

Кроме того, это не является постоянным.

4 голосов
/ 26 сентября 2016

Как упомянуто @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

Затем вы отредактировали свою историю, итот факт, что вы редактировали его!

4 голосов
/ 04 февраля 2014

Вы также можете использовать следующую команду:

echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')

Я думаю, что это очень переносимая команда

2 голосов
/ 12 декабря 2011

Есть несколько способов добиться этого. Это устанавливает размер файла истории на 0:

export HISTFILESIZE=0

Устанавливает для файла истории значение /dev/null, фактически отключая его:

export HISTFILE=/dev/null

Для отдельных команд вы можете поставить перед командой пробел, и она не будет сохранена в файле истории. Обратите внимание, что для этого необходимо, чтобы значение ignorespace было включено в переменную окружения $HISTCONTROL (man bash и найдите ignorespace для получения более подробной информации).

1 голос
/ 04 апреля 2018

Если вы используете 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."'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...