현재 환경(Fedora35, zsh 사용자 셸, oh-my-zsh, pyenv)에서는
~/.local/bin
경로에 존재하지 않습니다.
문제는 그것을 추가할 "올바른" 위치가 어디에 있느냐는 것입니다.
다양한 옵션이 있습니다:
- ~/.zshrc
- ~/.z로그인
- ~/.zshenv
- ~/.zprofile
또는 시스템 전체:
- /etc/zshenv
는 "ksh" 시뮬레이션 모드에서 /etc/zprofile
표준 을 얻는 데 사용됩니다 /etc/profile
./etc/profile.d/*sh
# from /etc/zprofile
# Make /etc/profile happier, and have possible ~/.zshenv options like
# NOMATCH ignored.
#
emulate -L ksh
# source profile
if [ -f /etc/profile ]; then
source /etc/profile
fi
(바라보다:https://apple.stackexchange.com/questions/388622/zsh-zprofile-zshrc-zlogin-what-goes-where)
다른 가능성도 있습니다 ( pam_env
).
Fedora에서는 /etc/profile
체크라인 블록을 포함합니다.인터렉티브쉘 (옵션 포함 i
) ${-}
:
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
해당 줄의 테스트에서 if [ "${-#*i}" != "$-" ]; then
표현식은 ${-#*i}
루프 변수와 아무 관련이 없지만 "()로 끝나는 시작 문자열을 옵션 목록에서 제거 $i
"를 의미하며 다음으로 해석됩니다.i
#*i
${-}
# with (interactive) zsh
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do echo "<${-#*i}> <$->"; done
<kmsy> <569NRXZghikmsy>
<kmsy> <569NRXZghikmsy>
<kmsy> <569NRXZghikmsy>
# with (interactive) bash
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do echo "<${-#*i}> <$->"; done
<mBHs> <himBHs>
<mBHs> <himBHs>
<mBHs> <himBHs>
<mBHs> <himBHs>
에서:https://tldp.org/LDP/abs/html/internalvariables.html
$-
스크립트에 전달된 플래그(set 사용) 이것은 원래 Bash에서 사용된 ksh 구성이었습니다. 이를 위한 한 가지 가능한 용도는 대화형인지 아닌지 스크립트 자체 테스트를 하는 것입니다.
다중 포함을 방지하는 /etc/profile.d/*sh
방법 일 수 있음인터렉티브껍데기.
/etc/bashrc
이 사례는 Interactive 에서 처리합니다 bash
.
# Source global bash config,
# when interactive but not posix or sh mode
if test "$BASH" &&\
test -z "$POSIXLY_CORRECT" &&\
test "${0#-}" != sh &&\
test -r /etc/bashrc
then
# Bash login shells run only /etc/profile
# Bash non-login shells run only /etc/bashrc
# Check for double sourcing is done in /etc/bashrc.
. /etc/bashrc
fi