使用 /etc/environment 设置系统范围的环境变量

are*_*gme 5 command-line bash environment-variables r

我想添加到我的 PATH 以便我的计算机(Ubuntu)知道在哪里解释“R”命令(用于启动 R)。我需要这个,以便终端或 RStudio 可以找到我安装 R 的位置。

我执行了以下所有操作,其中没有一个将命令 R 与我的 R 安装目录永久关联在~/R/bin.

  1. export PATH=$PATH:$HOME/R/bin <- 这在终端会话中有效,但如果我打开第二个终端,PATH 会回到我添加 $HOME/R/bin 之前的状态

根据各种网站上的建议,当我将此行添加到两个不同的文件时,发生了相同的“仅限本地终端”行为:

  1. sudo vim ~/.profile

    export PATH=$PATH:$HOME/R/bin
    
    Run Code Online (Sandbox Code Playgroud)
  2. sudo vim /etc/environment

    export PATH=$PATH:$HOME/R/bin
    
    Run Code Online (Sandbox Code Playgroud)

为什么在新的终端会话中不能识别 R?

ste*_*ver 7

/etc/environment文件不是脚本文件:AFAIK 你不能export在那里使用,它不支持类型的变量扩展$HOME,只是简单的variable=value对。因此,要使用该文件,您只需将路径附加到现有定义中,例如

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/username/R/bin"
Run Code Online (Sandbox Code Playgroud)

但是,以这种方式将系统范围 设置PATH为包含用户的主目录是一种有问题的做法恕我直言:正常的方法是使用用户自己的 shell 启动文件之一:~/.profile通常建议用于环境变量,但是它有只能由登录外壳调用的缺点,因此为了使其生效,您需要注销并重新登录 - 或者至少,启动一个新的登录外壳,例如使用

    su - username
Run Code Online (Sandbox Code Playgroud)

或者

    su -l username
Run Code Online (Sandbox Code Playgroud)

请注意,sudo不应使用 来编辑这些个人文件,因为它可能会使它们归 拥有root,这可能会导致进一步的问题。如果您已经使用过,sudo vim您可能需要使用sudo chown来恢复其正确的所有权,例如

sudo chown username:username ~/.profile
Run Code Online (Sandbox Code Playgroud)

然后您可以使用您喜欢的编辑器添加所需的路径组件,例如

vim ~/.profile
Run Code Online (Sandbox Code Playgroud)

您甚至可以考虑复制该~/bin文件中的现有范例,即将其添加为

# set PATH so it includes user's private R bin if it exists
if [ -d "$HOME/R/bin" ] ; then
    PATH="$HOME/R/bin:$PATH"
fi
Run Code Online (Sandbox Code Playgroud)