양해해 주세요. 이것은 기본 기록 제어 옵션에 대한 또 다른 질문일 뿐만 아니라 이에 대한 확실한 사용 사례가 있다고 생각합니다.
사용 사례
실행 중인 인스턴스가 많습니다 zsh
( tmux
tmux 연속체 및 부활 사용). 다음과 같은 요구 사항이 있습니다.
각 인스턴스에 대해 독립적인 기록을 가질 수 있기를 원합니다
zsh
. 즉, 각 인스턴스가zsh
시작될 때만 전역 기록 파일을 읽도록 하고 과거 명령을 검색할 때는 읽지 않기를 원합니다(그래서sharehistory
설정하고 싶지 않습니다). 그 이유는 한 세션( A 세션zsh
의 창 에서 작업 콘텐츠를 작업하는tmux
동안 거기에 나타나기 시작하기 때문입니다.zsh
그러나 때때로 나는 주어진 명령에 있고 어느 창
zsh
에서 원하는 명령을 실행했는지 기억할 수 없으며 현재 명령에서 실행하고 싶습니다 . 그래서 다른 창에서 실행할 수 있기를 원합니다. 인스턴스는 명령이 실행되자마자 (글로벌 히스토리에서) access 명령을 실행하지만zsh
tmux
zsh
zsh
어떤 대체 수단에 의해서만 가능하며,아니요역증분 이력 검색 사용( Ctrl+ R)또는 기록 스택zsh
( Ctrl+ P)에 있습니다. 이는 "로컬" 기록용으로만 예약되어야 하기 때문입니다.
따라서 솔루션은 다른 인스턴스에서 필요한 기록을 찾아야 zsh
하지만 Ctrl+ R는아니요, 기록은 현재 기록에 누적되어서는 안 됩니다 zsh
.
연구하고 시도해보세요
이를 바탕으로 unsetopt sharehistory
요구사항 1이 충족되어야 하며 setopt incappendhistory
요구사항 2에서 요구되는 측면이지만, 요구사항의 전부는 아닙니다.
history_get_global
grep하는 쉘 함수를 작성하고 ~/.zsh_history
(증분 기록 추가 세트가 있으므로 모든 새 항목이 거기에 있으므로) 선택할 수 있는 방식으로 확장할 수 있지만 수행할 수 있는 방법이 있는지 알고 싶습니다. zsh
바퀴를 재발명하지 않고도 기본적으로 이 작업을 수행할 수 있습니다 .
이와 같은 작업을 수행하면 exec $SHELL
(셸을 새 인스턴스로 교체) 모든 세션의 전체 공유 기록을 얻게 되므로( inappendhistory
거기서 설정되었다고 가정) 그런 것은 원하지 않습니다. 나는 이 질문의 주제에 대해 원하는 접근 방식을 사용하여 별도의 기록 줄을 유지하고 소량의 다른 세션 명령을 추가하는 것입니다. 아마도 글로벌 히스토리의 사용조차도 로컬 히스토리 스택으로 푸시되지 않으므로 로컬 zsh 히스토리 스택은 격리된 상태로 유지됩니다.