zsh: SHARE_HISTORY または INC_APPEND_HISTORY 割り込み EXTENDED_HISTORY

zsh: SHARE_HISTORY または INC_APPEND_HISTORY 割り込み EXTENDED_HISTORY

端末全体で履歴を共有し、履歴コマンドが実行された時期を追跡したいと思います。直感的なアプローチはとをEXTENDED_HISTORY使用しているようですが、これSHARE_HISTORYはシェルを再起動してから経過したすべてのタイムスタンプをゼロに設定します。これは正しいアプローチですか?可能ですか?

シナリオ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キーを押すだけです。

おすすめ記事