zsh: SHARE_HISTORY 또는 INC_APPEND_HISTORY 인터럽트 EXTENDED_HISTORY

zsh: SHARE_HISTORY 또는 INC_APPEND_HISTORY 인터럽트 EXTENDED_HISTORY

터미널 전체에서 기록을 공유하고 기록 명령이 실행된 시기를 추적하고 싶습니다. 직관적인 접근 방식은 EXTENDED_HISTORY및 를 모두 사용하는 것 같지만 SHARE_HISTORY이렇게 하면 셸을 다시 시작한 후 경과된 모든 타임스탬프가 0으로 설정됩니다. 이것이 올바른 접근 방식입니까? 가능합니까?

시나리오 1: EXTENDED_HISTORYSHARE_HISTORY

$ history -Dn | sed 's|\\n|\n      |g'
0:00  cat << EOF > ~/.zshrc
          HISTFILE=~/.zhistory-test
          HISTSIZE=100
          SAVEHIST=100
          setopt EXTENDED_HISTORY
          setopt SHARE_HISTORY # the only change compared to below
      EOF
0:00  exec zsh

0:00sleep 1

0:00  exec zsh

시나리오 2: 만EXTENDED_HISTORY

$ history -Dn | sed 's|\\n|\n      |g'
0:00  cat << EOF > ~/.zshrc
          HISTFILE=~/.zhistory-test
          HISTSIZE=100
          SAVEHIST=100
          setopt EXTENDED_HISTORY
      EOF
0:00  exec zsh

0:01sleep 1

0:00  exec zsh

시나리오 3: INC_APPEND_HISTORY그리고SHARE_HISTORY

시나리오 1과 동일하지만 SHARE_HISTORY로 대체하면 INC_APPEND_HISTORY동일한 효과가 있는 것으로 보입니다.

시스템 메시지

$ zsh --version

zsh 5.4.2 (x86_64-unknown-linux-musl)

$ ldd /usr/bin/zsh

        /lib/ld-musl-x86_64.so.1 (0x7f0f8b1d8000)
        libcap.so.2 => /lib/libcap.so.2 (0x7f0f8acfa000)
        libncursesw.so.6 => /lib/libncursesw.so.6 (0x7f0f8aa89000)
        libc.so => /lib/ld-musl-x86_64.so.1 (0x7f0f8b1d8000)

$ uname -a

Linux hostname 4.12.13_1 #1 SMP PREEMPT Thu Sep 14 13:15:00 UTC 2017 x86_64 GNU/Linux

$ lsb_release -d

Description:    Void Linux

답변1

여러 터미널 세션 간에 확장된 기록을 공유하는 여러 가지 방법을 테스트했는데 이것이 완벽하게 작동하는 유일한 방법입니다.

autoload -Uz add-zsh-hook

setopt extendedhistory incappendhistorytime

load-shared-history() {
  # Pop the current history off the history stack, so we don't grow
  # the history stack endlessly
  fc -P

  # Load a new history from $HISTFILE and push it onto the history 
  # stack.
  fc -p $HISTFILE
}

# Import the latest history at the start of each new command line.
add-zsh-hook precmd load-shared-history

이제 터미널 세션에서 기록을 동기화하기 위해 해야 할 일은 Enter 키를 누르는 것뿐입니다.

답변2

당신에게 필요한 유일한 옵션은SHARE_HISTORY

이것은역사적인 작업 비디오를 공유하세요

이것은 문서입니다연결됨+ 인용문

이 옵션은 기록 파일에서 새 명령을 가져오거나 사용자가 입력한 명령을 기록 파일에 추가할 수 있습니다(후자는 INC_APPEND_HISTORY를 지정하는 것과 같으며 이 옵션이 적용되는 경우 꺼져야 합니다). 히스토리 라인에는 EXTENDED_HISTORY 출력과 같은 타임스탬프도 함께 제공됩니다(이렇게 하면 파일을 다시 작성한 후 읽기를 중지한 위치를 더 쉽게 찾을 수 있습니다).

기본적으로 기록 이동 명령은 가져온 행과 로컬 행에 액세스하지만 set-local-history zle 바인딩을 사용하여 이 기능을 켜거나 끌 수 있습니다. 일부 명령은 가져온 명령을 무시하고 다른 명령은 이를 포함하도록 zle 위젯을 생성하는 것도 가능합니다.

명령을 가져올 때 더 많은 제어가 필요하다고 생각되면 SHARE_HISTORY를 끄고 INC_APPEND_HISTORY 또는 INC_APPEND_HISTORY_TIME(위 참조)을 켠 다음 필요할 때 "fc -RI"를 사용하여 수동으로 명령을 가져올 수 있습니다.

관련 정보