RStudio 显示不同的 $PATH 变量
RStudio shows a different $PATH variable
可能duplicate的问题,但我不知道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
但是,我的真实 $PATH
(当我从控制台 echo $PATH
时看到的)上面有很多其他程序,我希望能够使用 system( ) 来自 R。例如,在我的 .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 时,RStudio 不会从您的 /.bashrc
.相反,它将从系统范围的设置中获取环境变量。它如何找到这些系统设置将取决于操作系统。
Ubuntu
参见this explanation of environment variables in Ubuntu, especially the section on desktop applications。
根据那个解释:
You can add an environment variable to an application by editing its .desktop file. For example, to run "digiKam" with the environment variable APPMENU_DISPLAY_BOTH=1, find the corresponding digikam.desktop file and add the setting of the variable, via the env command, to the entry "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
Mac
系统范围的环境变量由 Launch Agent 设置,而不是由 Bash 设置。为从 Finder 启动的应用程序设置环境变量的确切方式将取决于您的 Mac OS X 版本。这 answer might help.
我这样做的方法是添加一个文件,~/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>
然后您必须加载该文件:
launchctl load ~/Library/LaunchAgents/com.username.envvariables.plist
您可能需要重新启动 Finder:
killall -KILL Dock
然后重启RStudio。
我通过将 PATH 添加到 ~/.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")
在这种情况下。
R 正在使用的路径也可以通过
在控制台中检查
Sys.getenv()
可能duplicate的问题,但我不知道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
但是,我的真实 $PATH
(当我从控制台 echo $PATH
时看到的)上面有很多其他程序,我希望能够使用 system( ) 来自 R。例如,在我的 .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 时,RStudio 不会从您的 /.bashrc
.相反,它将从系统范围的设置中获取环境变量。它如何找到这些系统设置将取决于操作系统。
Ubuntu
参见this explanation of environment variables in Ubuntu, especially the section on desktop applications。
根据那个解释:
You can add an environment variable to an application by editing its .desktop file. For example, to run "digiKam" with the environment variable APPMENU_DISPLAY_BOTH=1, find the corresponding digikam.desktop file and add the setting of the variable, via the env command, to the entry "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
Mac
系统范围的环境变量由 Launch Agent 设置,而不是由 Bash 设置。为从 Finder 启动的应用程序设置环境变量的确切方式将取决于您的 Mac OS X 版本。这 answer might help.
我这样做的方法是添加一个文件,~/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>
然后您必须加载该文件:
launchctl load ~/Library/LaunchAgents/com.username.envvariables.plist
您可能需要重新启动 Finder:
killall -KILL Dock
然后重启RStudio。
我通过将 PATH 添加到 ~/.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")
在这种情况下。
R 正在使用的路径也可以通过
在控制台中检查Sys.getenv()