Выполнять команду, не сохраняя ее в истории

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

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

Ответ 1

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

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

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

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

    export HISTCONTROL=ignorespace
    

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

Ответ 2

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

export HISTFILE =/dev/null

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

Просто не возитесь с тяжелой работой вашего sysadmin, пожалуйста;)

[UPDATE] Решение @Doodad более элегантно, просто отключите переменную: unset HISTFILE (спасибо!)

Ответ 3

echo "discreet";history -d $(history 1)

Ответ 4

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

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

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

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

"История -d" удаляет указанную запись из истории.

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

https://superuser.com/a/529193

Ответ 5

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

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

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

или даже лучше использовать пакетную утилиту, например

batch << EOB
   your commands
EOB

В этом случае история будет содержать sh или batch что не очень важно

Ответ 6

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

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

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

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

Ответ 7

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

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

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

Ответ 8

Как уже упоминалось @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

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

Ответ 9

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

export HISTFILESIZE=0

Это устанавливает файл истории в /dev/null, эффективно отключая его:

export HISTFILE=/dev/null

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

Ответ 10

Это удобно, если вы хотите удалить всю историю, включая тот факт, что вы удалили всю историю!

rm .bash_history;export HISTFILE=/dev/null;exit

Ответ 11

Если вы используете 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."'

Ответ 12

Эта команда может пригодиться. Это не будет записывать команду, которая выполняется

история -d $ ((HISTCMD-1)) &&

Ответ 13

Вам просто нужно запустить:
$ set +o history

Чтобы увидеть больше, запустите:
$ man set