一部のコマンドを実行したいが、コマンド履歴に保存したくない。そのため、.bash_history
ファイル内で検索することはできません。
この方法でbashコマンドを実行する方法はありますか?
一部のコマンドを実行したいが、コマンド履歴に保存したくない。そのため、.bash_history
ファイル内で検索することはできません。
この方法でbashコマンドを実行する方法はありますか?
回答:
スペースでコマンドを開始すると、コマンドは履歴に含まれません。
これには、環境変数$HISTCONTROL
を設定する必要があることに注意してください。
次のコマンドが返されることを確認するignorespace
か、
ignoreboth
#> echo $HISTCONTROL
存在しない場合に環境変数を追加するには、次の行をbashプロファイルに追加できます。例えば%HOME/.bashrc
export HISTCONTROL=ignorespace
プロファイルを再度ソースした後、スペースが前に付いたコマンドは書き込まれません $HISTFILE
特定のBashセッションで、次のように入力して、履歴ファイルを/ dev / nullに設定します。
export HISTFILE=/dev/null
コメントで指摘されているように、これはそのセッションのコマンドを履歴に書き込まないことに注意してください!
システム管理者のハードワークに手を加えないでください。;)
Doodadのソリューションはよりエレガントです。単に変数の設定を解除します:(unset HISTFILE
ありがとう!)
/dev/null
、ログアウト時にアクセス許可が0600に設定されることに関連する問題が発生しました。代わりに使用しましたunset HISTFILE
。
@John Doeと@ user3270492の回答の拡張。しかし、これは私にはうまくいくようです。
<your_secret_command>; history -d $((HISTCMD-1))
履歴にコマンドのエントリが表示されないはずです。
ここに説明があります。
'history -d'は、言及されたエントリーを履歴から削除します。
HISTCMDは、次に実行されるコマンドのcommand_numberを格納します。したがって、(HISTCMD-1)は最後に実行されたコマンドを指します。
おそらく、履歴のないシェルの使用を検討するかもしれません。
/bin/sh << END
your commands without history
END
(多分/bin/dash
または/bin/sash
より適切かもしれない/bin/sh
)
またはさらにバッチユーティリティを使用する
batch << EOB
your commands
EOB
歴史はそれから含んでいるsh
かbatch
、あまり意味がない
あなたはあなたのセッションを始めることができます
export HISTFILE=/dev/null ;history -d $(history 1)
その後、卑劣な行為を続行します。histfileをに設定する/dev/null
と、履歴ファイルに記録されますが、このエントリはすぐに削除され、トレース(少なくとも履歴ファイル内)は表示されません。
また、これは永続的ではありません。
Doodadがコメントで述べたように、unset HISTFILE
これはうまくいきますが、履歴も削除したい場合はecho $HISTFILE
、履歴ファイルの場所(通常は~/.bash_history
)を取得してunset HISTFILE
編集します~/.bash_history
(または何であれHISTFILE
-もちろん、今ではunset
これでできるので、 t読んでください)。
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
次に、履歴と編集した事実を編集しました。
unset HISTFILE; echo TEST; history
のコマンドを提供しますecho TEST
。セッションを終了して再度接続した後でも、履歴には実際にこのエントリはありません。だから私はそれがうまくいくと思います:)
unset HISTFILE
メモリ内の履歴に記録されているコマンドを停止するようには見えませんが、$ HISTFILEがあったファイルに記録されているコマンドを停止します。だから、あなたはまだあなたのローカル履歴をメモリに持っていると思いますが、それはもうファイルに記録されていません、それはあなたが望むかもしれないことです!;)
次のコマンドを使用することもできます。
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
$s
がsedの意味やその他のものを変更するため、エイリアスではなく関数を作成する必要があることに気づきました。function forget() { // put code here // }
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
詳細を検索してください)。
あなただけを実行する必要があります:
$ set +o history
詳細を表示するには、次を実行:
$ man set
set -x history
後でreverseコマンドを追加する限り、機能します。
このコマンドは便利かもしれません。これは実行されたコマンドを記録しません
history -d $((HISTCMD-1)) && <Your Command Here>