2013-08-15 11 views
5

いつでも同じサーバーに3つのログインがあります。私は、私が戻ってログインしたときのように、tty全体の履歴を結合する

1 session running something 
1 session looking at output 
1 session shuffling files to/from various places 

を私はすべての3つの接続を失う任意の時点で、私は私の歴史の2/3を失った場合:確かに、私は多くの場合、この目的は私が持っていることを可能にする画面を使用しますが、前提と私の3つの接続のうちのランダム1から履歴を取得します。

これをやめて3つの履歴ファイルを1つにまとめる方法はありますか?

また、各ログインを「ttyN」として宣言する方法はありますか?それで、それぞれ別々の履歴を別々に保持していますが、取り戻し可能/再接続可能な状態に保ちますか?

ありがとうございます!

+0

あなたの履歴には何が必要ですか?あなたの問題に対する解決策は、最初からやり直すのは簡単ではないようです... – Dru

+0

bashが使用しなければならない履歴ファイルの名前を定義することができます。このファイルは、bashプロセスの終了時に書き込まれます。 (しかし私はそれを使ったことはありません)これを使うと、 'HISTFILE'の異なる設定でbashを起動する限り、3つの異なる履歴ファイルを持つことができます。 – tue

答えて

-1

Bashインスタンスがそれぞれの履歴を上書きしないようにするためのさまざまなオプションがあります。完全な説明についてはthis FAQを参照してください:あなたの.bashrc

HISTFILESIZE=400000000 
HISTSIZE=10000 
PROMPT_COMMAND="history -a" 
export HISTSIZE PROMPT_COMMAND 
shopt -s histappend 
+0

動作していません。これを.bashrcに挿入して再起動しました(とにかく必要でした)。セッション2のttyコマンドは再ログイン時にセッション1の履歴にありません。 –

+0

これは、異なるシェルが履歴ファイルを上書きしないようにするだけです。実行中の1つのシェルからの履歴をリアルタイムで別のシェルで利用できるわけではありません。両方のシェルを任意の順序で閉じて3つ目のシェルを開始すると、起動前に1つではなく、3つ目のシェルで両方のシェルの履歴が使用できることがわかります。 –

1

考えられる解決策を追加しますか?あなたは歴史・ファイルの設定を使用してシェルを起動

あなたのターミナル/スクリーン

を開いた後

HISTFILE=$HOME/session1-history bash 

これはbashで作業を続けています。私はあなたの要件を理解している場合は、右あなたが開いている複数の端末セッションを持っており、1つのセッションで入力されたコマンドは、他のセッションで歴史を経由して利用できるようにするなど

HISTFILE=$HOME/session2-history bash 

0

を別のセッション履歴を実行するには 。

はあなたの~/.bashrcの上にこれらの行を配置する必要があります。

export HISTFILESIZE=100000 
export HISTSIZE=100000 
# avoid & erase dups 
export HISTCONTROL=ignoredups:erasedups 
shopt -s histappend 
# save & reload history after each command enter in shell 
export PROMPT_COMMAND="\history -a; \history -c; \history -r; $PROMPT_COMMAND" 

最も重要なのは、新しい履歴行は履歴ファイルに毎回追加されることを確認するhistappendです。

PS:各セッションで最近追加された履歴を表示するには、Enterキーを押す必要があります。より堅牢なソリューションについては

は、以下を参照してください。http://ptspts.blogspot.in/2011/03/how-to-automatically-synchronize-shell.html

0

はちょうどあなたの.bashrcファイルでこれを追加します。

# Avoid duplicates.. 
export HISTCONTROL=ignoredups:erasedups 

# Append history entries.. 
shopt -s histappend  

# After each command, save and reload history 
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r" 

この回答はUnix Stackexchange postで見つかりました。

これを試してみましたが、これは複数の端末で同時に動作するようですが、端末のコマンドを実行して、.bash_historyから最新の履歴を取得する必要があります。

たとえば、最初の端末を開いてecho check 1と入力し、2番目の端末を開いてecho check 2と入力します。今度は最初の端末に戻って上のキーを押すと、前回のコマンドを実行したときの履歴ファイルから最後にフェッチされた時刻なので、echo check 2は得られません。したがって、コマンドを指定せずにEnterを押すだけで、最後の履歴エントリが取得されます。アップキーを押すと、予期した動作であるecho check 2が表示されます。

1

問題を解決するオープンソースのシェル履歴ロガーがあります(免責事項:私はそれを書き、維持しています)。

https://github.com/barabo/advanced-shell-history

アイデアは、あなたのコマンドは、組み込みbashのフックを使用してsqlite3のデータベースに書き込まれることです。あなたが本当に戻って、あなたが入力したコマンド/実行した時間/終了コードが何であるか把握する必要がある場合は、試してみるべきです。

何度も私を救ってくれました。

関連する問題