모든 터미널의 bash 기록을 한 번에 업데이트할 수 없습니다

모든 터미널의 bash 기록을 한 번에 업데이트할 수 없습니다

나는 gnome-terminal과 함께 Ubuntu 22.04.3을 새로 설치하고 있으며 ~/.bashrc를 직접 편집하지 않습니다. 다양한 출처에서 다음을 추가하면 내가 원하는 것을 얻을 수 있다고 말합니다.

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

나는 그렇습니다 source ~/.bashrc.

내가 원하는 것은 다음과 같은 일이 일어나는 것입니다. 두 개의 터미널 창을 엽니다. 먼저 실행합니다 echo 1. 두 번째 실행에서는 echo 2위쪽 화살표를 누르면 다음이 표시됩니다 echo 2. 대신에 내가 본 것은 echo 1. 이는 bash 창 기록이 서로 독립적임을 의미합니다. 창을 닫았다가 다시 열면 기록이 병합되지만 명령이 실행될 때 모든 창의 기록이 업데이트되기를 원합니다.

이 목표를 어떻게 달성할 수 있나요?

答え1

history -a명령을 문자열의 일부로 사용하면 각 프롬프트 전에 명령을 올바르게 호출하는 것처럼 보입니다 $PROMPT_COMMAND. 그러면 현재 메모리 내 기록이 기록 파일에 추가됩니다.

그러나 기록 파일에 기록을 추가하는 것은 자동으로 수행되지 않습니다.읽다동일한 파일에서 기록을 업데이트하므로 를 사용해야 합니다 history -n. 이 명령은 "기록 파일에서 읽지 않은 모든 기록 줄을 읽고 이를 기록 목록에 추가합니다"( help history셸에서). "기록 목록"은 명령줄 기록의 메모리 내 기록입니다.

이는 다음을 의미합니다.

PROMPT_COMMAND="history -a; history -n; $PROMPT_COMMAND"

또는 기록 파일에서 모든 기록을 다시 읽기 전에 메모리 내 기록을 지우려는 경우(기록에서 위 명령의 순서가 직관적이지 않은 경우 이 옵션을 사용할 수 있습니다):

PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

파일을 여러 번 편집하면 source문자열에 점점 더 많은 내용이 추가됩니다. 이런 습관이 있다면 다음과 같이 하는 것이 더 나을 수도 있습니다..bashrc$PROMPT_COMMAND

original_prompt_command=${original_prompt_command-$PROMPT_COMMAND}
PROMPT_COMMAND="history -a; history -n; $original_prompt_command"

설정하지 않은 경우 변수 값을 original_prompt_command변수 값으로 설정합니다. 그런 다음 이 새 변수를 사용하여 업데이트합니다. 그 결과 파일을 여러 번 가져오면PROMPT_COMMANDoriginal_prompt_commandPROMPT_COMMAND원래 $PROMPT_COMMAND값은 항상 확장되며 문자열이 점점 길어지는 것은 아닙니다.

関連情報