zsh: 다른 zsh 세션의 기록에 액세스하지만 기본적으로는 아닌 선택 방법을 통해서만 가능합니다(예: 역증분 검색, 기록 스택).

zsh: 다른 zsh 세션의 기록에 액세스하지만 기본적으로는 아닌 선택 방법을 통해서만 가능합니다(예: 역증분 검색, 기록 스택).

양해해 주세요. 이것은 기본 기록 제어 옵션에 대한 또 다른 질문일 뿐만 아니라 이에 대한 확실한 사용 사례가 있다고 생각합니다.

사용 사례

실행 중인 인스턴스가 많습니다 zsh( tmuxtmux 연속체 및 부활 사용). 다음과 같은 요구 사항이 있습니다.

  1. 각 인스턴스에 대해 독립적인 기록을 가질 수 있기를 원합니다 zsh. 즉, 각 인스턴스가 zsh시작될 때만 전역 기록 파일을 읽도록 하고 과거 명령을 검색할 때는 읽지 않기를 원합니다(그래서 sharehistory설정하고 싶지 않습니다). 그 이유는 한 세션( A 세션 zsh의 창 에서 작업 콘텐츠를 작업하는 tmux동안 거기에 나타나기 시작하기 때문입니다.zsh

  2. 그러나 때때로 나는 주어진 명령에 있고 어느 창 zsh에서 원하는 명령을 실행했는지 기억할 수 없으며 현재 명령에서 실행하고 싶습니다 . 그래서 다른 창에서 실행할 수 있기를 원합니다. 인스턴스는 명령이 실행되자마자 (글로벌 히스토리에서) access 명령을 실행하지만zshtmuxzshzsh어떤 대체 수단에 의해서만 가능하며,아니요역증분 이력 검색 사용( Ctrl+ R)또는 기록 스택 zsh( Ctrl+ P)에 있습니다. 이는 "로컬" 기록용으로만 예약되어야 하기 때문입니다.

따라서 솔루션은 다른 인스턴스에서 필요한 기록을 찾아야 zsh하지만 Ctrl+ R아니요, 기록은 현재 기록에 누적되어서는 안 됩니다 zsh.

연구하고 시도해보세요

이를 바탕으로 unsetopt sharehistory요구사항 1이 충족되어야 하며 setopt incappendhistory요구사항 2에서 요구되는 측면이지만, 요구사항의 전부는 아닙니다.

history_get_globalgrep하는 쉘 함수를 작성하고 ~/.zsh_history(증분 기록 추가 세트가 있으므로 모든 새 항목이 거기에 있으므로) 선택할 수 있는 방식으로 확장할 수 있지만 수행할 수 있는 방법이 있는지 알고 싶습니다. zsh바퀴를 재발명하지 않고도 기본적으로 이 작업을 수행할 수 있습니다 .

이와 같은 작업을 수행하면 exec $SHELL(셸을 새 인스턴스로 교체) 모든 세션의 전체 공유 기록을 얻게 되므로( inappendhistory거기서 설정되었다고 가정) 그런 것은 원하지 않습니다. 나는 이 질문의 주제에 대해 원하는 접근 방식을 사용하여 별도의 기록 줄을 유지하고 소량의 다른 세션 명령을 추가하는 것입니다. 아마도 글로벌 히스토리의 사용조차도 로컬 히스토리 스택으로 푸시되지 않으므로 로컬 zsh 히스토리 스택은 격리된 상태로 유지됩니다.

관련 정보