在/etc/environment vs profile中,设置路径变量

分享于 

3分钟阅读

ubuntu

  繁體

问题


  • 如果要添加路径,例如

    
    PATH="/your/additional/path:$PATH"
    
    
    PATH="$PATH:/your/additional/path"
    
    
    
    

    注意,路径优先级从左到右递减,因此第一个路径的优先级最高,如果将路径添加到$PATH的左边,那么该位置中的最高优先级和可执行文件将覆盖所有其他路径。

  • 但是,如果需要为所有用户设置环境变量,我仍然不建议touch /etc/environment,但可以创建一个以.sh结尾的文件,/etc/profile脚本和/etc/profile.d中的所有脚本是每个用户个人~/.profile的全局等效脚本,并在所有shell中作为常规脚本执行。

  • 更多细节:

  • /etc/environment是一个系统范围的配置文件,这意味着它被所有用户使用,它由root拥有,因此你是管理员用户,并使用sudo修改它。

  • ~/.profile是你自己的用户个人shell初始化脚本之一,每个用户都有一个,并可以编辑他们的文件而不影响其他人。

  • /etc/profile/etc/profile.d/*.sh是与每个用户的~/.profile等效的全局初始化脚本,全局脚本在用户特定的脚本之前执行;主/etc/profile/etc/profile.d/退出之前执行所有*.sh脚本。

  • /etc/environment文件通常只包含此行:

    
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
    
    
    
    

    每个用户的shell将这个文件作为第一个配置文件之一读取,它只是一个以某种方式解析的配置文件,它只能包含环境变量赋值!

  • ~/.profile文件可以包含许多内容,默认情况下它包含其他内容检查~/bin目录是否存在,并将它添加到用户的现有变量

    
    # set PATH so it includes user's private bin if it exists
    
    
    if [ -d"$HOME/bin" ] ; then
    
    
     PATH="$HOME/bin:$PATH"
    
    
    fi
    
    
    
    

    此初始化脚本由它所属用户的shell只读,但存在另一个条件:

    
    # ~/.profile: executed by the command interpreter for login shells.
    
    
    # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
    
    
    # exists.
    
    
    
    

    如果使用默认的Bash shell,则应确保没有~/.bash_profile~/.bash_login,如果希望~/.profile中的更改生效。

  • 有关环境变量的完整理解,请参见:https://help.ubuntu.com/community/EnvironmentVariables


    SET  VAR  Setting  路径  Profile  variable