RStudio显示不同的$PATH变量

RStudio显示不同的$PATH变量,r,rstudio,path-variables,R,Rstudio,Path Variables,可能有问题,但我不知道RStudio的启动过程,无法判断问题是否相同。我正在Linux上使用RStudio Desktop v0.99.442。从RStudio内部的控制台,我运行 system("echo $PATH") /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 但是,我的real$PATH(当我从控制台中看到echo$PATH时)有很多其他程序,我希望能够

可能有问题,但我不知道RStudio的启动过程,无法判断问题是否相同。我正在Linux上使用RStudio Desktop v0.99.442。从RStudio内部的控制台,我运行

system("echo $PATH")
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
但是,我的real
$PATH
(当我从控制台中看到echo$PATH时)有很多其他程序,我希望能够使用R中的system()调用这些程序。例如,在my.bashrc中,我将tabix附加到了
$PATH

奇怪的是,当我在控制台中的R会话中运行相同的命令时,我得到

system("echo $PATH")
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix

这是正确的。因此,RStudio中的R会话与控制台中的R会话之间存在差异。它们不加载相同的环境变量。如何让RStudio使用正确版本的$PATH?

当您从命令行启动R,然后运行
system(echo$PATH)
时,您将从命令行会话继承Bash环境。当您从Mac上的Dock或Finder或Ubuntu中的系统应用程序而不是从命令行启动RStudio时,RStudio不会从您的
/.bashrc
获取其环境。相反,它将从系统范围的设置中获取环境变量。它如何找到这些系统设置将取决于操作系统

Ubuntu 请参阅Ubuntu,尤其是

根据这一解释:

通过编辑应用程序的.desktop文件,可以将环境变量添加到应用程序中。例如,要使用环境变量APPMENU_DISPLAY_BOTH=1运行“digiKam”,请找到相应的digiKam.desktop文件,并通过env命令将变量设置添加到条目“Exec”:

RStudio
.desktop
文件将位于
~/.local/share/applications/
/usr/share/applications/
(很可能是后者)。编辑该文件以包含此行:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix
雨衣 系统范围的环境变量由启动代理设置,而不是由Bash设置。如何为从Finder启动的应用程序设置环境变量,具体取决于您的Mac OS X版本。这一点非常重要

我这样做的方法是添加一个文件,
~/Library/LaunchAgents/com.username.envvariables.plist
,其中包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.username.envvariables</string>
    <key>ProgramArguments</key>
    <array>
      <string>sh</string>
      <string>-c</string>
      <string>
        launchctl setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix
      </string>
    </array>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>
您可能需要重新启动Finder:

killall -KILL Dock
然后重新启动RStudio。

我通过向~/.Renviron添加路径解决了这个问题(在MAC上) 您可以运行以下命令:

$ touch ~/.Renviron | R_PATH="PATH=$PATH" | echo $R_PATH >  ~/.Renviron

然后重新启动Rstudio。现在,在这两种情况下,您应该有相同的$PATH。

我遇到了相同的问题。与Lincoln的答案不同,我在RStudio控制台中手动设置了正确的环境

Sys.setenv(PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix")
Sys.getenv()
在这种情况下

R正在使用的路径也可以通过在控制台中进行检查

Sys.setenv(PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix")
Sys.getenv()

我正在使用Linux(Ubuntu v15.04)。更新了我的问题。@Josh Bradley:我已经更新了答案,包括Ubuntu。谢谢。向.desktop文件添加绝对路径
env path=/path/to/bcftools-1.2/htslib-1.2.1/tabix
。为了获得更好的解决方案,我尝试使用
env PATH=${PATH}
env PATH=$PATH
将其设置为扩展当前路径,但RStudio PATH变量不正确。@LincolnMullen Hi Lincoln,您的解决方案确实解决了我的问题。非常感谢。同时,我可以问一下,我们如何使用这种方法在rstudio中添加dyld_library_path?因为系统('echo$DYLD\u LIBRARY\u PATH')在终端中返回一些路径时不返回任何内容。非常感谢。此更改对当前会话是持久的还是有效的?当我将其放入.Renviron时,它可以工作,但RStudio仍然将
/usr/local/bin
挂在前面,这不是我想要的。此方法会导致使用
doParallel
进行并行处理时出现问题。更多信息,请参阅。