현재 다음과 같이 홈 디렉토리를 정리하려고 합니다.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-zsh
5.8zsh --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에 특정 설정을 작성합니다. 대화형 세션이 열립니다.
순서가 중요합니다. 건배!