履歴リストからコマンドを除いて「ライブ」履歴に保存するにはどうすればよいですか?

履歴リストからコマンドを除いて「ライブ」履歴に保存するにはどうすればよいですか?

さらに、あなたが提供した優勝HISTIGNOREオプションの優れたヒントのおかげで、私は.bashrc意味のない部分lldf -k行をすべて省略して、私の記録をはるかに明確にすることができました。

しかし、HISTIGNORE選択の余地が多いこともわかりました。限定的な、また。たとえば、次のような行がある場合(単純化)

HISTIGNORE='ll*:la*:cd*'

これらを除外するだけでなく、リスト、だけでなくあなたの「生きた歴史」Cursor up/を介してアクセスできる揮発性レコードの名前を指定したいからですCursor down。これを試してください:コマンド履歴を循環するためにそのカーソルキーをどれだけ長く使用しても、今は完全に無視されます。

しかし時々私するこの行は、特に再入力したくない長い複雑なパスに必要です。一方、私は行が欲しい。排他的私の人生の歴史を歴史に保存する代わりにリスト頻繁に変わるからです。

これを行う方法はありますか?

別の注意点として、何らかの理由で「リアルタイム」履歴と履歴リストが時々表示されることがわかりました。その他たくさん(参照同じユーザーと履歴コマンドを使用して異なる結果を得るのはなぜですか?)。

答え1

HISTIGNORE環境変数を使用できます。

履歴リストに保存する必要があるコマンドラインを決定するために使用されるコロンで区切られたパターンのリスト。たとえば、

export HISTIGNORE="cd*:ls*"

これにより、履歴のすべての cd および ls コマンドは無視されます。

編集する:

申し訳ありません。初めて読んだとき、あなたの質問は十分に考慮されませんでした。ちなみに、あなたは正しいです:HISTIGNOREこれは非常に難しい設定であり、bash_historyはこの変数にリストされているすべてのコマンドを単に無視します(実行時にそれを無視します。そのコマンドがすでにアイテムに存在する場合は次のようになりますHISTFILE)。歴史的逆探索。

最後の質問に最初に答えると、異なる端末を同時に使用する場合、ライブ履歴と作成された履歴が非常に異なる可能性があります。以下の解決策を試すことができます。

複数の端末ウィンドウでbash履歴を保持する

~/.bash_logout不要な履歴エントリを削除するファイルの関数を使用するソリューションを想像できます。

次のタスクが必要なタスクを実行する必要があります。

 function clear_history(){
    # hist_ignore regex, this may be done in a more fancy way, 
    # such as using an env variable, but anyway
    MYHISTIGNORE='^cd:^view:^cat'

    # write down history to file
    history -w

    # create a new tmp file for history
    tmpFile=$(mktemp)
    cp ${HISTFILE}  ${tmpFile}

    # use it to filter history
    for myRegex in $(echo $MYHISTIGNORE | awk 'BEGIN{FS=":"}{for (i=1;i<=NF;i++){print $i}}'); do 
       sed -i "/${myRegex}/d" ${tmpFile}
    done

    # and copy it back to history file
    mv ${tmpFile} ${HISTFILE}
}

答え2

3つの可能なオプション

時間が足りません - 修正歓迎

0)各コマンドを履歴に一時的に保存できるようにエイリアスを設定します。

Alias histsave='$HISTIGNORE && HISTIGNORESAVED=$HISTIGNORE;histignore=""; echo「すべてのコマンドを履歴に保存する」#すべての履歴履歴を保存する

alias histignore='$HISTIGNORESAVED && (HISTIGNORE=$HISTIGNORESAVED; echo "保存しないでください: 履歴に $HISTIGNORES コマンド";exit(0)) || echo "nutnがあります。"'#いくつかの履歴を無視します。

1)2番目のbashセッションで複雑なコマンドを入力します。

エイリアス設定: alias histig='HISTIGNORE=""''

ターミナルから。右クリックして水平/垂直に分割するか、同じ場所で新しいセッションを開始します。

ヒストグラム

複雑なコマンドを入力すると、#通常は履歴に保存されます。

選択科目:

History -w # 他の端末セッションで使用するために保存するには、History -r を使用します。

2) 複雑なコマンドの保存ワンタイムでコメントを活用

コメントにするには、コマンドの前に#を付けます。

クリック:ホーム、#、Enter。今それはあなたの歴史にあります。

コマンドを実行するには、上矢印、ホーム、削除(#)、Enter...をクリックします。

利点:

記録を許可すると、通常は HISTIGNORE 設定は除外されます。 grep History for '#'では、特に便利なコマンドを見つけることができます。

解決策:

コマンドを履歴に保存する場合は、「##」を使用できます。

欠点:

最初に必要/予想どおりに機能しなくてもコマンドを保存します。

これらのいくつかはあなたに合わないかもしれません == YMMV

関連情報