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

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

최근 명령을 터미널 세션에서 검색 하려고 하는데 ~/.bash_history해당 명령이 없습니다. 여러 개의 터미널 세션이 열려 있기 때문인 것 같습니다.

현재 터미널 세션의 명령 기록을 bash_history 파일로 동기화(예: 동기화 푸시 또는 동기화 쓰기)하는 방법이 있습니까(세션을 닫거나 해당 환경을 잃지 않고)?

sync(이 명령이 일부 시스템에서 파일 시스템 수정 사항을 저장하는 방법과 아이디어가 매우 유사합니다.)

여러 세션 기록을 유지하기 위해 bash를 설정할 수 있다고 가정하지만, 현재 기록 버퍼를 푸시하는 기능은 새 컴퓨터에서 작업 중이고 실수로 원하는 방식으로 bash 설정을 잊어버렸을 때 여전히 유용합니다.

답변1

다음 줄을 추가하세요 .bashrc.

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

새 터미널을 열고 확인해보세요.

설명하다

  • history -a기록 파일에 새 기록 줄을 추가합니다.
  • history -nbash기록 파일에서 읽지 않은 행을 세션의 현재 기록 목록으로 읽어오도록 지시합니다 .
  • PROMPT_COMMANDbash: 이 변수의 내용은 프롬프트가 표시되기 전에 일반 명령으로 실행됩니다. 따라서 명령을 실행할 때마다 history -a; history -n명령이 실행되고 bash기록이 동기화됩니다.

답변2

터미널, 특히 새 터미널 간에 이력을 공유할 수 있다는 점이 마음에 들지만요. 하나의 창은 일반적으로 다른 창과 별도로 특정 작업을 수행하기 때문에 모든 명령을 공유하고 싶지 않습니다. 쉘이 종료되거나 요청할 때 병합하도록 하겠습니다.

나는 오랫동안 bash 기록(타임스탬프 포함)을 병합하는 방법을 찾고 있었지만 수용 가능한 항목을 찾을 수 없는 것 같습니다...

마지막으로, 나는 디스크의 ".bash_history"와 메모리의 셸 "history"를 병합하는 스크립트를 DIY로 만들었습니다. 타임스탬프의 순서와 해당 타임스탬프 내의 명령 순서는 유지됩니다.

이제 그것을 얻을 때(원한다면 별칭이나 함수로 만들 수 있습니다) 별칭 "hc"를 사용합니다. 현재 셸 세션은 디스크와 메모리 간에 병합되므로 필요할 때(또는 ".bash_logout"을 통해 셸에서 로그아웃할 때) 다른 이전 병합에서 기록이 업데이트됩니다.

정의된 Perl RE를 기반으로 고유한 명령(여러 줄 포함)을 제거하거나 단순하고 민감한 명령을 제거(지우기)하도록 선택할 수 있습니다. 맞게 조정하세요!

이것이 결과입니다 ...https://antofthy.gitlab.io/software/history_merge.bash.txt

즐기다.

관련 정보