zsh의 extend_history는 무엇을 합니까?

zsh의 extend_history는 무엇을 합니까?

Extended_history 옵션을 보고 다음과 같이 사용하는 것을 보았습니다.zsh의 각 디렉토리 기록하지만 실제로 extend_history가 무엇을 하는지 이해하지 못하셨나요?

메시지가 무엇입니까? zsh_history에서 사용할 수 있습니다. 그렇지 않으면 이 옵션이 설정되지 않으면 사용할 수 없습니다.

~에서http://zsh.sourceforge.net/Doc/Release/Options.html#Options그 내용은——

EXTENDED_HISTORY <C>

    Save each command’s beginning timestamp (in seconds since the epoch) and the duration (in seconds) to the history file. The format of this prefixed data is:

    ‘: <beginning time>:<elapsed seconds>;<command>’. 

하지만 적어도 히스토리 명령을 실행할 때는 아무런 이점이 없습니다.

 shirish@debian ~ % history | grep tail -5
      601* exit
      602* history
      603* exit
      604  cd
      605  cat ~/.zsh/.zshrc
      606   tail -5 history

이렇게 ~/.zsh/.zshrc구성했어요 -

shirish@debian ~ % cat ~/.zsh/.zshrc
# Lines configured by zsh-newuser-install
HISTFILE=~/.zsh//.histfile
HISTSIZE=1000
SAVEHIST=100000
setopt inc_append_history autocd nomatch notify share_history extended_history
bindkey -e
# End of lines configured by zsh-newuser-install

# display how long all tasks over 10 seconds take
export REPORTTIME=10

# The following lines were added by compinstall
zstyle :compinstall filename '/home/shirish/.zsh//.zshrc'

autoload -Uz compinit promptinit
compinit
promptinit
# End of lines added by compinstall

prompt adam1

옵션을 설정하거나 옵션을 제거한 후에는 아무런 차이가 없으며 의미가 없습니다.

shirish@debian ~ % cat ~/.zsh/.zshrc | grep setopt
setopt inc_append_history autocd nomatch notify share_history extended_history
shirish@debian ~ % source ~/.zsh/.zshrc           
shirish@debian ~ % history -E                     
  337  11.1.2018 23:33  history | grep apg
  338  11.1.2018 23:33  man apg
  339  11.1.2018 23:33  cd
  340  11.1.2018 23:33  apg -a 1 -M n -n 3 -m 20
  341  11.1.2018 23:33  apg -a 1 -M SNCL -n 3 -m 20
  342  11.1.2018 23:33  history 
  343  11.1.2018 23:33  history -E
  344  11.1.2018 23:33  leafpad ~/.zsh/.zshrc
  345  11.1.2018 23:33  cat ~/.zsh/.zshrc
  346  11.1.2018 23:33  source ~/.zsh/.zshrc
  347  11.1.2018 23:33  history -E
  348  11.1.2018 23:33  exit
  349  11.1.2018 23:33  history -E
  350  11.1.2018 23:34  leafpad ~/.zsh/.zshrc
  351  11.1.2018 23:35  cat ~/.zsh/.zshrc | grep setopt
  352  11.1.2018 23:35  source ~/.zsh/.zshrc
shirish@debian ~ % leafpad ~/.zsh/.zshrc          
shirish@debian ~ % source ~/.zsh/.zshrc 
shirish@debian ~ % history -E           
  340  11.1.2018 23:33  apg -a 1 -M n -n 3 -m 20
  341  11.1.2018 23:33  apg -a 1 -M SNCL -n 3 -m 20
  342  11.1.2018 23:33  history 
  343  11.1.2018 23:33  history -E
  344  11.1.2018 23:33  leafpad ~/.zsh/.zshrc
  345  11.1.2018 23:33  cat ~/.zsh/.zshrc
  346  11.1.2018 23:33  source ~/.zsh/.zshrc
  347  11.1.2018 23:33  history -E
  348  11.1.2018 23:33  exit
  349  11.1.2018 23:33  history -E
  350  11.1.2018 23:34  leafpad ~/.zsh/.zshrc
  351  11.1.2018 23:35  cat ~/.zsh/.zshrc | grep setopt
  352  11.1.2018 23:35  source ~/.zsh/.zshrc
  353  11.1.2018 23:35  history -E
  354  11.1.2018 23:36  leafpad ~/.zsh/.zshrc
  355  11.1.2018 23:36  source ~/.zsh/.zshrc
shirish@debian ~ % cat ~/.zsh/.zshrc | grep setopt
setopt inc_append_history autocd nomatch notify share_history

보시다시피 별 차이는 없는 것 같습니다.

% zsh --version
zsh 5.4.2 (x86_64-debian-linux-gnu)

답변1

옵션에 관계없이 의 출력은 history -E항상 동일합니다 EXTENDED_HISTORY. 명령 기간은 기록 파일에 직접 저장됩니다(값을 보려면 파일을 확인하세요).

그러나 또 다른 문제는 이 동작을 재정의할 수 있는 옵션이 있다는 것입니다. sleep 3다음과 같은 항목을 생성하는 유사한 명령을 실행하여 이것이 작동하는지 테스트할 수 있습니다 .

pol@host ~ $ sleep 3
pol@host ~ $ tail -1 ${HISTFILE}
: 1530663493:3;sleep 3
pol@host ~ $ setopt | grep hist
extendedhistory
histignoredups
incappendhistorytime

"Duration" 값이 3인 것을 볼 수 있습니다. 3이 아닌 경우 EXTENDED_HISTORY작동을 방해하는 다른 옵션 세트가 있을 가능성이 높습니다. 여기에는 SHARED_HISTORY및 가 포함됩니다 INC_APPEND_HISTORY. 전자가 필요한 경우 운이 좋지 않습니다. 후자의 경우 위에서 언급한 대로 값도 INC_APPEND_HISTORY_TIME갖고 싶다면 다른 대안이 있습니다.EXTENDED_HISTORY

답변2

이 답변을 참고하겠습니다https://unix.stackexchange.com/a/453336/277040약간 오해의 소지가 있습니다. 실제로 출력은체재state와 관계없이 동일하겠지만 history -EZsh 세션이 항상 이렇다면 EXTENDED_HISTORY타임스탬프는 상대적으로 의미가 없게 됩니다. unsetopt EXTENDED_HISTORY의 각 줄에는 HISTFILE타임스탬프 정보가 없는 명령이 포함되므로 history -E모두 동일한 시간( HISTFILE특정 셸이 열리고 메모리로 읽혀진 시간)을 출력합니다.

예를 들어, ~/.zsh_history과거에 다른 시간에 실행된 명령 목록이 있다고 가정해 보겠습니다.

echo 1
echo 3
echo 5

이 답변을 작성한 날 오후 5시 3분에 셸을 열면 history -E출력은 다음과 같습니다.

    1  24.6.2020 17:03  echo 1
    2  24.6.2020 17:03  echo 3
    3  24.6.2020 17:03  echo 5

관련 정보