履歴ファイルを一時的に凍結します。

履歴ファイルを一時的に凍結します。

次の2つの質問は、特定のコマンドがシェル履歴に追加されるのを防ぐ方法について説明します。

答えは、ユーザーが利用できるソリューションに焦点を当てています。各コマンドにプレフィックスを追加する(たとえば、スペースを含む)私が探しているのは、一度だけ実行すると効果的に動作できるコマンドです。必ずぶら下げる「マイ履歴ファイルは、後で別のコマンドを使用して固定を解除するまでシェルにあります。

たとえ歴史は「冬の王国":

  1. 私は私のコマンドを可能にしたい読む既存の履歴ファイルで(たとえば、コマンド検索を実行できるように)、たとえば標準のオートコンプリートをC-r実行します。

  2. 私が実行しているすべてのコマンドが履歴に追加されないようにしたいと思います。

zshを使ってこれを行うにはどうすればよいですか?

答え1

fc -pを使用して新しい履歴リストを起動し、fc -P古い履歴リストを呼び出すことができます。プレーン後には空のfc -p履歴レコードが取得されます。fc -p履歴を読み取るファイル名を渡すことができるため、履歴が保存され、すぐに使用できます。呼び出し前の値が復元fc -pされます。fc -PHISTFILEfc -p

freeze_history () {
    fc -A
    fc -p $HISTFILE
    unset HISTFILE
}
unfreeze_history () {
    fc -P
}

残念ながら、履歴はメモリから直接編集することはできず、ファイルから読み取って人工的にのみ埋めることができます。

答え2

私は次のエイリアスを使用します.zshrc

alias disablehistory="function zshaddhistory() {  return 1 }"
alias enablehistory="unset -f zshaddhistory"

したがって、を実行でき、disablehistory新しいコマンドは現在のセッションの履歴に入力されません。それからenablehistory

どのように動作しますか?disablehistory定義履歴フック機能

フック関数が状態1を返す場合(または2以外のゼロ以外の値。将来のバージョンのシェルでは保証されませんが)履歴行は保存されません。、次の行が実行されるまで履歴に残りますが、すぐに再利用または編集できます。

zshしたがって、履歴エントリが常に拒否されることを示します。

enablehistoryunsets(-f関数を表す)zshaddhistory 関数を使用してデフォルトの動作を返します。

答え3

unset HISTFILE次のことが役立ちます。セッション履歴をオフにするには入力できます。ログアウトして再度ログインすると、再起動されます。

また、ワンクリックで履歴のコマンドに戻って削除することもできますCTRL-u

頑張ってください!

関連情報