zsh 쉘에서 PATH=~/.local/bin:$PATH를 어디에 설정해야 합니까?

zsh 쉘에서 PATH=~/.local/bin:$PATH를 어디에 설정해야 합니까?

현재 환경(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
         

관련 정보