Bash コマンド履歴のクロスセッション重複排除

Bash コマンド履歴のクロスセッション重複排除

問題の背景:

  • いつも活発ignorebotherasedups
  • HIST_SIZEFILESIZE予想/実際の制限がありますその他ユーザーの歴史
  • ほぼ常に複数の並列セッションと(通常)ネストされたセッションがあります。

予想される動作:

  • セッションを閉じて別のセッションを再開した後は、セッション履歴に重複したコンテンツがあってはなりません。

  • 他のセッションを開く前にすべてのセッションを閉じる必要はありません。

  • アクティブセッションの履歴は、他の実行中/閉じたセッションの影響を受けてはなりません(したがって、すべてのセッションに対して単一の履歴を選択することは解決策ではありません)。

  • 一方、新しいセッションは開く前に、記録ラインのすべての部分を(自然に)閉じる必要があります(もちろん重複せずに)。

アクション:

  1. 一部のシステムで他の並列セッションなしでセッションを開始する

  2. 仮定する保存済みHistory²最後の3行:

    ./reference-point  # anything, just to use as a reference
    ls
    la
    ll
    
  3. ネストされたセッションを開始します(sshコマンドとbashコマンドも履歴に残ります)。私は簡単にします:

    ssh machine
    
  4. 3つのコマンドをそれぞれ少なくとも1回、異なる順序で実行してください。たとえば、

    ll
    ls
    la
    ll
    
  5. 最後の4行は次のようになります。

    ./reference-point  # anything, just so we know
    ls
    la
    ll
    
  6. これでこのセッションを閉じます(CTRL + Dまたは履歴に保持されていないすべての項目を使用)。最初のセッションでは、最後の5行は次のようになります。

    ./reference-point  # anything, just so we know
    ls
    la
    ll
    ssh machine
    
  7. このセッションを閉じます(現在唯一のアクティブセッションです)。

  8. 別のセッションを開始し、過去10件の履歴を確認してください。

    ./reference-point  # anything, just so we know
    ls
    la
    ll
    ls
    la
    ll
    ssh machine
    

この例では、歴史的な反復が互いに付着します。しかし、もちろん実用的な目的ではありません。悪い副作用は、私たちが使用できる構成から記録サイズを推測できないことです。さらに、これらの行動は明らかに間違っています。

私が望む以上に「HIST * SIZE」構成を増やすことに加えて、問題を解決したり(少なくとも)もっとうまく処理したりする他の方法はありますか?


いくつかのメモをしたいです。

このバグはかなり古く、実際の解決策を思いついた人は誰もいません。そして、私の特定の状況では、Web上で提供されているソリューションの一部に問題や小さな「問題」がある可能性があります。

この問題は2014年サバンナに関する報告。しかし、これまで誰もその本を読んでいないようです。確認してみることができます(そしてBashの公式の場所なので、そこに役立つコメントを投稿することもできます)。

-

ネストされたセッションは私に必要であり、一般的でなければなりません。例:閉じたネットワークアクセスコンピュータにSSHで接続し、1つ以上のコンピュータに再度ログインします(並列セッションでも一般的です)。

²保存されたコマンドに影響を与えずに履歴行を確認するには、「ignoreboth」Bash設定を使用して「history 10」(コマンドの前のスペースに注意してください)またはそれと同様の操作を実行します。この質問を書いている間、私はテストにこれを使用しました。

関連情報