zsh_history 파일에 문제가 있습니다

zsh_history 파일에 문제가 있습니다

현재 다음과 같이 홈 디렉토리를 정리하려고 합니다.XDG 기본 디렉토리 웹사이트.

이를 위해 나는 다음을 저장했습니다 ~/.zshenv.

# ---- Default editors ---- #
export EDITOR="nvim"
export VISUAL="nvim"

# ---- XDG BASE DIRECTORY ---- #
# https://wiki.archlinux.org/title/XDG_Base_Directory
export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
export XDG_CACHE_HOME=${XDG_CACHE_HOME:="$HOME/.cache"}
export XDG_DATA_HOME=${XDG_DATA_HOME:="$HOME/.local/share"}
export XDG_STATE_HOME=${XDG_STATE_HOME:="$HOME/.local/state"}

# ---- ZSH ---- #
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
export HISTFILE="$XDG_STATE_HOME/zsh/history"
export SHELL_SESSION_DIR="$XDG_STATE_HOME/zsh/sessions"
export SHELL_SESSION_FILE="$SHELL_SESSION_DIR/$TERM_SESSION_ID"

문제는 내가 원하는 것과 일치하지 않는 것을 echo $HISTFILE준다는 것이다 .~/.config/zsh/.zsh_history$XDG_STATE_HOME/zsh/history

echo $HISTFILE파일 끝에 추가를 시도했는데 정확히 내가 원하는 것을 ~/.zshenv제공합니다 . ~/.local/state/zsh/history하지만 터미널에서 실행 하면 echo $HISTFILE여전히 ~/.config/zsh/.zsh_history.$HISTFILE~/.zshenv이유와 해결 방법을 모르겠습니다.

제 생각에 효과가 있을 것으로 생각되는 해결책은 파일을 변경하는 것입니다 /etc/zprofile. 하지만 저는 컴퓨터 소프트웨어를 업데이트할 때마다 모든 파일이 재설정될 것이라고 생각하기 때문에 그렇게 하는 것을 좋아하지 않습니다(제 생각엔...). 그렇지 않은 경우 거기에서 수정하여 $HISTFILE.

하지만 더 나은 해결책이 있다면 도와주세요.. (또한 컴퓨터 소프트웨어를 업데이트할 때 /etc/zprofile,,, /etc/zshrc... 파일이 재설정된다는 것도 알고 싶습니다...)

참고로 저는 써본적이 없는데 oh-my-zsh5.8 zsh --version입니다

답변1

echo $HISTFILE파일 끝에 추가를 시도했는데 정확히 내가 원하는 것을 ~/.zshenv제공합니다 . ~/.local/state/zsh/history그러나 터미널 에서 실행 하면 echo $HISTFILE여전히 ~/.config/zsh/.zsh_history.$HISTFILE~/.zshenv

어쩌면 그렇게 보일 수도 있지만, 아마도 다음 파일 중 하나(또는 그 이상!)에서 덮어쓰여지고 있을 가능성이 높습니다.출처: Zsh뒤쪽에 ~/.zshenv, 여기에 지정된 순서대로:

/etc/zprofile
$ZDOTDIR/.zprofile
/etc/zshrc
$ZDOTDIR/.zshrc
/etc/zlogin
$ZDOTDIR/.zlogin

덮어쓴 위치를 정확히 찾으려면 가장 쉬운 방법은 Zsh를 시작하는 것입니다.

zsh --sourcetrace --verbose

이것은 것이다

  • 가져오기 전에 각 파일을 인쇄합니다(Zsh에서 직접 가져오지 않은 파일 포함).
  • 평가되기 전에 각 명령(매개변수 할당 포함)을 인쇄합니다.

제 생각에 효과가 있을 것으로 생각되는 해결책은 파일을 변경하는 것입니다 /etc/zprofile. 하지만 저는 컴퓨터 소프트웨어를 업데이트할 때마다 모든 파일이 재설정될 것이라고 생각하기 때문에 그렇게 하는 것을 좋아하지 않습니다(제 생각엔...).

서버를 관리하는 경우가 아니면 일반적으로 이 부분을 건드리지 말아야 합니다 /etc. 시스템 파일에 발생하는 상황이 마음에 들지 않으면 /etc/z*다음 두 가지 옵션이 있습니다.

  • Zsh 구매 방지어느 /etc/z*파일, zsh -d.
  • /etc/z*Zsh가 파일을 가져오지 못하도록 방지밖의 /etc/zshenv,setopt NO_globalrcs에 추가하세요 ~/.zshenv.

/etc/zprofile컴퓨터 소프트웨어를 업데이트할 때 ,,, /etc/zshrc... 파일이 재설정되는 지도 알고 싶습니다 ...

macOS를 업데이트할 때마다 재설정됩니다. 다른 시스템에서는 Zsh 패키지를 업데이트할 때마다 재설정되거나 재설정되지 않을 수 있습니다. 이는 패키지 관리 방법에 따라 다릅니다.


그건 그렇고, ~/.zshenv모든 새로운 사례는 출처가 있다는 점에 유의하십시오.비대화형 쉘을 포함합니다.대조적으로, Zsh는 $ZDOTDIR/.zprofile로그인 쉘에 대한 소스만 제공하는 반면 $ZDOTDIR/.zshrc, Zsh는 모든 로그인 쉘에 대한 소스를 제공합니다.인터렉티브껍데기.

Apple의 Terminal.app은 새 창이나 탭을 열 때마다 로그인 셸을 실행합니다. 그러나 대부분의 Linux 터미널은 사용자가 구성하지 않는 한 이러한 방식으로 로그인 셸을 시작하지 않습니다. Zsh 도트 파일을 이식 가능하게 하려면 Zsh가 macOS에서 로그인 셸로만 실행된다고 가정하는 것이 가장 좋습니다.

이 정보를 바탕으로 전역 변수 할당을 다음과 같이 재구성하는 것이 좋습니다.

$HOME/.zshenv:

# No need to export anything here, as .zshenv is sourced for 
# _every_ shell (unless invoked with `zsh -f`).

# Assign these only if they don't have value yet. 
: ${XDG_CONFIG_HOME:=$HOME/.config}
: ${XDG_STATE_HOME:=~/.local/state}

# Set $ZDOTDIR here to be able to store your other Zsh dotfiles 
# outside of $HOME. 
ZDOTDIR=$XDG_CONFIG_HOME/zsh

$ZDOTDIR/.zprofile:

# The following have to go in .zprofile, because they are used by 
# macOS's /etc/zshrc file, which is sourced _before_ your`.zshrc` 
# file.
export SHELL_SESSION_DIR=$XDG_STATE_HOME/zsh/sessions
export SHELL_SESSION_FILE=$SHELL_SESSION_DIR/$TERM_SESSION_ID

$ZDOTDIR/.zshrc:

# HISTFILE is used by interactive shells only. Plus, 
# non-interactive shells & external commands don't need this var. 
# Hence, we put it in your .zshrc file, since that's sourced for 
# each interactive shell, and don't export it.
HISTFILE=$XDG_STATE_HOME/zsh/history

# Only vars used by external commands or non-interactive sub 
# shells need to be exported. Note that you can export vars 
# without assigning values to them.
export XDG_CONFIG_HOME XDG_STATE_HOME
export XDG_CACHE_HOME=~/.cache
export XDG_DATA_HOME=~/.local/share
export EDITOR=nvim VISUAL=nvim

답변2

이러한 사용자 기본 설정을 처리하는 것은 작업 이 아닙니다 ~/.zshenv.~/.zshrc

나중에 시스템 기본값을 적용하지 않으려면 env 대신 rc 파일을 편집해 보십시오.

나는 env에서 내 zsh 설정 파일에 대해 완전히 다른 위치를 적용합니다(즉, ~가 아님). 그런 다음 로그인 시에만 가져오기를 원하는지 또는 새로 액세스할 때마다 가져오기를 원하는지 여부에 따라 프로필과 rc에 특정 설정을 작성합니다. 대화형 세션이 열립니다.

순서가 중요합니다. 건배!

관련 정보