私のエントリには.bashrc
以下を追加しました。
# https://stackoverflow.com/a/40158199/9881330
function rescue_history {
history -a
}
trap rescue_history SIGHUP
ただし、client_loop: send disconnect: Connection reset by peer
その後も記録が失われるため、この方法は機能しません。入力したすべての便利なコマンドが失われるので、これは非常に迷惑です!
.bashrc
重要な質問:ピアによってSSH接続がリセットされたときに履歴レコードを保存するように設定する方法は?
この「記録保存」動作がデフォルトで有効になっていないことは非常に混乱しています。
私も.bashrc
これを持っています(助けになれば):
# new history settings
# http://jesrui.sdf-eu.org/remember-all-your-bash-history-forever.html
HISTTIMEFORMAT='%F %T '
HISTFILESIZE=-1
HISTSIZE=-1
HISTCONTROL=ignoredups
#HISTIGNORE=?:?? # lines with one or two characters are discarded from the history (e.g. ls commands)
shopt -s histappend # append to history, don't overwrite it
# attempt to save all lines of a multiple-line command in the same history entry
shopt -s cmdhist
# save multi-line commands to the history with embedded newlines
shopt -s lithist
答え1
特殊変数を使用してコマンドを入力するたびにコマンドを実行できますPROMPT_COMMAND
。history -a
PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND/%;};}history -a"
これにより、同時セッションのコマンドが混在して混乱するロールバックが発生する可能性があります。
この問題を克服するために、各セッションのホームディレクトリに時間、tty、およびpidタグファイルを生成する必要がある少し複雑なバージョンがあります。
SESSION_HISTORY_FILE="${HOME}/bash_history_$(date -d "$(ps -olstart= -p$$ | awk '{print $2,$3,$5,$4}')" +%F_%H-%M-%S)$(tty | tr / _)_$$"
PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND/%;};}history -a '${SESSION_HISTORY_FILE}'"
ここでのアイデアは、実行されたコマンドの正しいコンテキストレコードを生成することです。
終了したセッションの場合は、後ろにスクロールしてもその項目は表示されません(追加しない限り;history -a
)。