временно приостановить bash\_history на данной оболочке?

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

<p>это должно быть то, что вы ищете:</p><pre><code>unset histfile </code></pre><h3>от <code>man bash</code></h3><blockquote> <p>если histfile не установлен или если файл истории недоступен для записи, история не сохраняется.</p> </blockquote><p>в качестве альтернативы, если вы хотите отключить и снова включить его, может быть проще использовать <a href="https://ss64.com/bash/set.html"><code>set</code></a> :</p><h3>выключи</h3><pre><code>set +o history </code></pre><h3>включить</h3><pre><code>set -o history </code></pre>

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

<p>убедитесь, что <code>histcontrol</code> содержит <code>ignorespace</code>. возможно, вы захотите добавить <code>histcontrol=ignorespace</code> (или <code>histcontrol=ignoredups:ignorespace</code> или что-то) к вашему <code>~/.bashrc</code>. тогда любая командная строка, которая начинается с пробела, исключается из истории.</p><p>другая возможность - начать новый сеанс bash, который не сохраняет его историю.</p><pre><code>$ bash $ unset histfile $ sooper-sekret-command $ exit $ #back in the parent shell 

если вам нужно избежать сохранения нескольких команд и вы все еще хотите использовать стрелку вверх для доступа к предыдущим командам, используйте:$ bash # open a new session. $ unset histfile # avoid recording commands to file. $ commands not recorded . . $ exit $ </code></pre><hr><p>существует четыре способа (уровня) управления хранением команд.</p><ol> <li> <p>первый и самый простой - использовать <code>ignorespace</code> (или ignoreboth):</p> <pre><code>$ histcontrol="ignorespace${histcontrol:+:$histcontrol}"  это позволит использовать пробел перед командами, которые вы хотите избежать записи в списке памяти history. и, как следствие, поскольку в памяти нет записанной команды, которая могла бы быть отправлена в файл, также будет предотвращаться отправка команды <strong>одна</strong> в файл, указанный в $hisfile</code>.</p> </li> <li> <p>избегайте записи команд в файл в <code>$histfile: $ unset histfile </code></pre> <blockquote> <p>если не установлено, история команд не сохраняется при выходе из командной консоли.</p> </blockquote> <p>значение null <code>histfile=''</code> и / или установите <code>histfile=/dev/null</code> работает с тем же эффектом. поймите, что команды все еще записываются в список памяти, попробуйте команду <code>history</code> или стрелку вверх.</p> <p>предупреждение: если histfile сбрасывается до того, как shell существует, все, что было записано в памяти, все равно может быть записано в файл.</p> </li> <li> <p>избегайте записи <strong>новых</strong> команд в список истории в памяти. и, так как не находится в памяти, не может быть записан в файл.</p> <pre><code>$ shopt -ou history # or set +o history  повторно включите с помощью shopt -os history (или set -o history)   удалите все команды из списка истории в памяти: $ histsize=0 </code></pre> <p>все команды удаляются (из памяти), и, следовательно, ничто не может быть сохранено в файл, конечно, пока переменная не будет снова установлена в какое-либо действительное числовое значение.</p> </li> </ol>

<p>существует один простой способ отключить историю, поэтому команды не будут храниться в <code>.bash\_history</code> файл.</p><p>вы должны поместить пробел или символ табуляции перед любой командой, чтобы эта команда не сохранялась в истории. например:</p><pre><code>$ ls print the list of file $ history ls history $ pwd print the current working directory $ history ls history </code></pre><p>команда <code>pwd</code> не будет сохранена в истории, потому что она имеет пробел в начале.</p>

<pre><code>export histfile=/dev/null </code></pre><p>это мой путь. на случай, если неустановленный history/histfile/histcontrol и т.д. не работает, экспорт его в/dev/null всегда работал для меня.</p>

<p>чтобы еще немного расширить ответ siegex и перевести его в режим инкогнито ...</p><p>отказ от ответственности: материал заголовка, вероятно, будет работать на терминале gnome. это было проверено только в linux mint 19.3/gnome terminal 3.28.1, потому что я ленивый.</p><p>добавьте следующее к вашему <code>~/.bash\_functions</code> (предполагается, что вы импортируете его через <code>.bashrc</code>/<code>.profile</code> так далее):</p><pre><code>function setgnometerminaltitle() { local new\_title="$1"; ps1="[e]0;${new\_title}\a\]\${debian_chroot:+($debian\_chroot)}\[\033[01;32m\]\u@\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 "$user@$hostname:${pwd//\${home////\/}/~}" && set -o history" правка: для объяснения названия заголовка гистона - обычно заголовок окна в gnome-терминал - "$ user @ $ hostname: $ {pwd}", за исключением того, что если вы находитесь в своей домашней папке,/home/foo, он отображается как <code>~</code>; по крайней мере, это на моем компьютере. эта команда использует подстановку строк bash, чтобы избежать косой черты в <code>$home так мы получаем /home/foo, а затем, в свою очередь, использовать это в качестве регулярного выражения для замены этого шаблона в $pwd</code> с буквальным <code>~</code> ... а затем добавляется несколько escape-символов, чтобы он работал как псевдоним в строке в двойных кавычках.</p><p>теперь, когда вы набираете <code>histoff</code>, вы получаете изменение заголовка для режима инкогнито, и ваша история останавливается для этого сеанса в этом окне (word <code>histoff</code> все еще регистрируется, но ничего после). если вы затем наберете <code>histon</code>, он вернет заголовок и все строки после <code>histoff</code> до и включая строку с <code>histon</code> не будут зарегистрированы, но все после <code>histon</code> зарегистрировано.</p><p>пример:</p><pre><code>## 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; </code></pre>