GNU/Linux >> Linux の 問題 >  >> Linux

履歴リストからコマンドを除外する方法、しかしそれを「ライブ」履歴に保持する方法は?

その間、HISTIGNOREに関する皆さんのすばらしいヒントのおかげで、私の歴史をずっときれいに保つことができました。 .bashrcのオプション 、これらの無意味なllをすべて省略します またはdf -k 行。

ただし、HISTIGNORE オプションは非常に制限的です 、も。
たとえば、このような行がある場合(簡略化)

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

これらをリストから除外するだけではありません 、だけでなく、「ライブ履歴」からも カーソルを上にしてアクセスできる揮発性の履歴をダビングしたいので /カーソルを下に移動 。試してみてください。カーソルキーを使用してコマンド履歴をどれだけ循環しても、これらは完全に省略されます。

ただし、することもあります これらの行が必要です。特に、再入力したくない非常に長く複雑なパスの場合はそうです。一方で、これらの行を排他的にしたいのですが 私のライブ履歴に追加し、履歴リストに保存しないようにします 頻繁に変更されるため。

これを達成する方法はありますか?

別の補足として、何らかの理由で、「ライブ」履歴と履歴リストが異なる場合があることがわかりました。 多くの場合(同じユーザーと履歴コマンドで異なる結果が得られるのはなぜですか)

承認された回答:

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}
}

Linux
  1. LinuxでBashの履歴をクリアする方法

  2. Linuxで特定のサイズのファイルをコピーから除外する方法

  3. ファイルのリストを検索から除外する

  1. Linuxでhistoryコマンドを使用する方法

  2. コマンドが履歴に追加されないようにする方法はありますか?

  3. ls コマンドからディレクトリを除外するにはどうすればよいですか

  1. LinuxでBashの履歴から特定のコマンドをクリアする方法

  2. Linuxのコマンド履歴を管理する方法

  3. コマンドラインからPHPでロードまたは有効化されたモジュールを一覧表示する方法