위쪽 화살표를 클릭하면 기록이 순환되지 않습니다.

위쪽 화살표를 클릭하면 기록이 순환되지 않습니다.

저는 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"

관련 정보