it-swarm-ru.tech

Временно приостановить bash_history на данной оболочке?

Есть ли способ временно приостановить отслеживание истории в bash, чтобы войти в своего рода режим "инкогнито"? Я ввожу в свой терминал информацию, которая не нужна для записи конфиденциальной финансовой информации.

128
Naftuli Kay

Это должно быть то, что вы ищете:

unset HISTFILE

От man bash

Если HISTFILE не установлен или если файл истории недоступен для записи, история не сохраняется.

В качестве альтернативы, если вы хотите отключить и снова включить его, может быть проще использовать set :

Выключи

set +o history

Включить

set -o history
173
SiegeX

Используя bash, установите HISTCONTROL="ignorespace" и ​​ставьте перед пробелом любую команду, которую вы не хотите записывать в историю. Если вы забыли принять какие-либо меры, есть также history -d <number> для удаления определенной записи или history -c для очистки всей истории команд.

33
forcefsck

Убедитесь, что HISTCONTROL содержит ignorespace. Возможно, вы захотите добавить HISTCONTROL=ignorespace (или HISTCONTROL=ignoredups:ignorespace или что-то) к вашему ~/.bashrc. Тогда любая командная строка, которая начинается с пробела, исключается из истории.

Другая возможность - начать новый сеанс bash, который не сохраняет его историю.

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent Shell
27

Если вам нужно избежать сохранения нескольких команд и вы все еще хотите использовать стрелку вверх для доступа к предыдущим командам, используйте:

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

Существует четыре способа (уровня) управления хранением команд.

  1. Первый и самый простой - использовать ignorespace (или ignoreboth):

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"
    

    Это позволит использовать пробел перед командами, которые вы хотите избежать записи в списке памяти history. И, как следствие, поскольку в памяти нет записанной команды, которая могла бы быть отправлена ​​в файл, также будет предотвращаться отправка команды одна в файл, указанный в $HISFILE.

  2. Избегайте записи команд в файл в $HISTFILE:

    $ unset HISTFILE
    

    Если не установлено, история команд не сохраняется при выходе из командной консоли.

    Значение NULL HISTFILE='' и ​​/ или установите HISTFILE=/dev/null работает с тем же эффектом. Поймите, что команды все еще записываются в список памяти, попробуйте команду history или стрелку вверх.

    Предупреждение: если HISTFILE сбрасывается до того, как Shell существует, все, что было записано в памяти, все равно может быть записано в файл.

  3. Избегайте записи новых команд в список истории в памяти. И, так как не находится в памяти, не может быть записан в файл.

    $ shopt -ou history              # or set +o history
    

    Повторно включите с помощью shopt -os history (или set -o history)

  4. Удалите все команды из списка истории в памяти:

    $ HISTSIZE=0
    

    Все команды удаляются (из памяти), и, следовательно, ничто не может быть сохранено в файл, конечно, пока переменная не будет снова установлена ​​в какое-либо действительное числовое значение.

6
Isaac

Существует один простой способ отключить историю, поэтому команды не будут храниться в .bash_history файл.

Вы должны поместить пробел или символ табуляции перед любой командой, чтобы эта команда не сохранялась в истории. Например:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

Команда pwd не будет сохранена в истории, потому что она имеет пробел в начале.

3
Kalanidhi M.
export HISTFILE=/dev/null 

Это мой путь. На случай, если неустановленный HISTORY/HISTFILE/HISTCONTROL и т.д. Не работает, экспорт его в/dev/null всегда работал для меня.

2
Ambrose

Чтобы еще немного расширить ответ SiegeX и перевести его в режим инкогнито ...

Отказ от ответственности: материал заголовка, вероятно, будет работать на терминале gnome. это было проверено только в Linux Mint 19.3/Gnome Terminal 3.28.1, потому что я ленивый.

Добавьте следующее к вашему ~/.bash_functions (предполагается, что вы импортируете его через .bashrc/.profile так далее):

function setGnomeTerminalTitle() {
    local NEW_TITLE="$1";
    PS1="\[\e]0;${NEW_TITLE}\a\]\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\]";
}

Затем добавьте следующее к вашему ~/.bash_aliases (опять же, предполагается, что вы импортируете его через .bashrc/.profile так далее):

alias title="setGnomeTerminalTitle";
alias hist='history'
alias histoff="setGnomeTerminalTitle 'Incognito Window' && set +o history"
alias histon="setGnomeTerminalTitle \"[email protected]$HOSTNAME:\${PWD//\${HOME//\\//\\\\\\/}/\\~}\" && set -o history"

Правка: для объяснения названия заголовка гистона - обычно заголовок окна в gnome-терминал - "$ USER @ $ HOSTNAME: $ {PWD}", за исключением того, что если вы находитесь в своей домашней папке,/home/foo, он отображается как ~; по крайней мере, это на моем компьютере. эта команда использует подстановку строк bash, чтобы избежать косой черты в $HOME так мы получаем \/home\/foo, а затем, в свою очередь, использовать это в качестве регулярного выражения для замены этого шаблона в $PWD с буквальным ~ ... а затем добавляется несколько escape-символов, чтобы он работал как псевдоним в строке в двойных кавычках.

Теперь, когда вы набираете histoff, вы получаете изменение заголовка для режима инкогнито, и ваша история останавливается для этого сеанса в этом окне (Word histoff все еще регистрируется, но ничего после). Если вы затем наберете histon, он вернет заголовок и все строки после histoff до и включая строку с histon не будут зарегистрированы, но все после histon зарегистрировано.

Пример:

## this is still logged
histoff  

## this is NOT logged
echo "my password is: password";
fake_ua='If firefox and curl had a child, would it be named furl?';
curl -A "$fake_ua" https://www.itsnotap0rnsiteipromise.com/curvy-girlz/;

vi ~/Documents/maths/super-secret-squirrel/gift-ideas.txt

## this is still NOT logged
histon

## this is logged again
Sudo apt install -y kmag;

0
zpangwin