저는 Unix & Linux를 처음 접했고 다른 질문에 대한 이미 자세한 접근 방식에 대해 의견을 말하고 싶었습니다. 내 담당자는 50세 미만이므로(슬프게도) 그렇게 할 수 없습니다. 나는 이 문제에 대한 해결책을 시도했습니다.여러 터미널 창에서 bash 기록 유지
export HISTCONTROL=ignoredups:erasedups # no duplicate entries
export HISTSIZE=100000 # big big history
export HISTFILESIZE=100000 # big big history
shopt -s histappend # append to history, don't overwrite it
# Save and reload the history after each command finishes
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
불행하게도 그 결과 증가하는(병합된) 기록(원함)이 있지만 새 창에서 더 이상 "위쪽 화살표"(예상 없음)를 사용하여 해당 기록을 순환할 수 없습니다. 즉, 새 창에서 실행되는 명령만 반복할 수 있습니다. 예를 들어, 새 터미널을 열고 500줄의 기록을 받으면 3개의 명령을 실행하고 위쪽 화살표를 사용하여 이 501-503만 순환할 수 있습니다.
새 터미널을 열고 다음을 수행합니다.
$ history #enter
.
.
584 foo
585 bar
.
.
600 baz
$ history #enter
1 history
왜 이런 일이 일어나는지 설명해 줄 수 있나요? 해결 방법이 있나요? 감사해요.
답변1
내가 게시한 링크의 댓글 섹션에서 솔루션으로 이동하는 것이 가능한 것 같습니다.Bash 기록: 'ignoredups' 및 'erasedups' 설정이 세션 전체의 공통 기록과 충돌합니다.
대신에:
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
사용:
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
답변2
bash에 기록이 있고 기록을 쓰는 모든 위치에 대해 기록이 있는 이유는 다른 모든 bash 쉘이 파일에 쓰는 동안(history -a) 파일에 쓰기 때문입니다.반품같은 파일에 씁니다.
그런 다음 파일(history -r)의 모든 명령을 메모리로 읽습니다.
해결책으로 (새) 명령을 파일(history -a)에 쓸 수 있지만 결과 파일을 읽을 수는 없습니다. 명령 목록기억 속에실행 중인 모든 bash 인스턴스에 속합니다. Bash의 각 인스턴스에는 서로 다른 명령 목록이 있습니다. 모든 명령은 기록 파일에 기록됩니다.
사용bashrc또는 유사):
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"