6

常に同じサーバーに 3 つのログインがあります。確かに、私は screen をよく使用しますが、この目的で次のことが可能になると仮定します。

 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」として宣言して、それぞれの履歴を個別に保持しながら、取得/再接続可能にする方法はありますか?

ありがとう!

4

5 に答える 5

1

.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 の投稿でこの回答を見つけました。

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

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

于 2014-06-08T17:03:05.343 に答える
1

可能な解決策?

端末/画面を開いた後

History-File 設定でシェルを起動します。

HISTFILE=$HOME/session1-history  bash

このbashで作業を続けます。別のセッション履歴を実行するには

HISTFILE=$HOME/session2-history  bash

于 2013-08-16T07:35:47.973 に答える
1

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

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

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

何度も救われました。

于 2014-08-01T17:30:08.097 に答える