bash에서 터미널 세션 명령 기록을 동기화하는 방법은 무엇입니까?


13

~/.bash_history터미널 세션에서 최근 명령 을 검색하려고했지만 거기에 없었습니다. 여러 터미널 세션이 열려 있기 때문입니다.

현재 터미널 세션의 명령 내역을 bash_history 파일에 동기화 (예 : sync-push 또는 sync-write-out) 할 수있는 방법이 있습니까 (세션을 닫고 환경을 잃지 않고)?

( sync명령이 일부 시스템에서 파일 시스템 수정 사항을 저장하는 방법과 원격으로 유사 합니다.)

여러 세션 기록을 유지하기 위해 bash를 설정할 수 있다고 생각하지만 새 시스템에서 작업 할 때 현재 기록 버퍼를 푸시하는 기능은 시나리오에서 여전히 유용 할 수 있으며 실수로 원하는 방식으로 bash를 설정하는 것을 잊었습니다. .


history -a 쉘 내장 명령을 시도 했지만 어떻게 든 .bash_history파일 에 대해 '권한이 거부되었습니다' .
n611x007

답변:


19

이 줄을 .bashrc다음에 추가하십시오 .

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

새 터미널을 열고 확인하십시오.

설명

  • history -a 새 히스토리 라인을 히스토리 파일에 추가합니다.
  • history -nbash히스토리 파일에서 현재 히스토리 목록으로 읽지 않은 행을 읽도록 지시 합니다.
  • PROMPT_COMMAND:이 변수의 내용은 bashshow prompt 전에 일반 명령으로 실행됩니다 . 따라서 명령을 실행 한 후에 history -a; history -n는 실행되고 bash기록이 동기화됩니다.

감사! 왜 이전에 권한이 거부되었는지 알지 못하지만 새로운 터미널을 사용하면 예상대로 작동하는 것 같습니다! 나는 보통 history -a수정되지 않은 bashrc가있는 터미널에서 사용할 수 있어야한다고 생각합니다 .
n611x007

언제이 성능의 영향에 대해 걱정해야합니까? (저는 저가형 장치에 대해 생각하고 있는데, 이것이 얼마나 큰 오버 헤드인지 확실하지 않습니다.)
n611x007

1
또한 프롬프트 명령이 이미있을 수 있습니다.이 경우 사용하는 것이 좋습니다.export PROMPT_COMMAND="${PROMPT_COMMAND};history -a; history -n"
Fabian

${PROMPT_COMMAND}비어있는 경우 이것은 선행으로 인해 오류가 발생합니다;
Boris Däppen

@ BorisDäppen은 옳습니다. 그러나 이것은 쉽게 해결됩니다export PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;}history -a; history -n"
TML
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.