PATH=~/.local/bin:$PATH 应该在 zsh shell 中设置在哪里?

PATH=~/.local/bin:$PATH 应该在 zsh shell 中设置在哪里?

在我当前的环境(Fedora35、zsh 用户 shell、oh-my-zsh、pyenv)中, ~/.local/bin路径中不存在。

问题是“正确”的添加位置在哪里?

有多种选择:

  • 〜/.zshrc
  • 〜/.zlogin
  • 〜/.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包含一个检查行块交互的shell(带有选项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此案例由for 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
         

相关内容