나는 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_COMMAND
original_prompt_command
PROMPT_COMMAND
원래 $PROMPT_COMMAND
값은 항상 확장되며 문자열이 점점 길어지는 것은 아닙니다.