Bash: 피어가 SSH 연결을 재설정한 후 기록이 손실되었습니다. 기록을 저장하는 방법은 무엇입니까?

Bash: 피어가 SSH 연결을 재설정한 후 기록이 손실되었습니다. 기록을 저장하는 방법은 무엇입니까?

내 항목에는 .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).

관련 정보