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

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

さらに、あなたが提供した優勝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}
}

おすすめ記事