我正在使用environment modules集群。这意味着我必须专门加载除默认版本(2.13)以外的任何R版本,因此要加载R 3.0.1,我必须指定
module load R/3.0.1
R
我在
module load R/3.0.1
中添加了.bashrc
,因此,如果我将ssh放入服务器并加载R,则默认情况下它将打开3.0.1。但是,当我在服务器上打开R(M-x R
,起始数据目录:/ssh:myserver
)时,它将加载默认的R安装(2.13)。这个问题与先前的问题类似,除了我使用本地安装的emacs访问服务器上的R。 (ESS to call different installations of R和How can I specify the R version opened by ESS session in emacs?)
最佳答案
TL; DR
module show R/3.0.1
(add-to-list 'tramp-remote-path "/path/to/R-3.0.1/bin")
TRAMP通过ssh调用的bash会执行其初始化文件,但是最终要执行的文件取决于几件事。您可以通过在文件中添加诸如
~/.bashrc
之类的内容来检查当您使用TRAMP连接到服务器时,是否完全执行了echo "bashrc here"
。然后设置变量(setq tramp-verbose 9)
并尝试连接。现在,看看是否可以在名为
*debug tramp/ssh...*
的缓冲区中发现该消息。如果没有其他设置,TRAMP会将远程 shell 程序称为
/bin/sh
(http://www.gnu.org/software/tramp/#Remote-shell-setup),以便bash
将执行/etc/profile
和~/.profile
(http://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html#Bash-Startup-Files)。您还可以看到如何在该*debug tramp/ssh...*
缓冲区中调用 shell 程序,相关行将为tramp-open-shell (5) # Opening remote shell `/bin/sh'...done
尝试先将
module load R/3.0.1
添加到~/.profile
。如果这样做没有帮助,请尝试通过设置强制TRAMP以其专有名称调用bash
(setq explicit-shell-file-name "bash")
(setq shell-file-name "bash")
更新:如果所有其他方法都失败,则可以打开shell
M-x shell
,然后将ssh打开到服务器,该服务器应进行适当的模块初始化(因为您提到了交互式ssh连接按预期工作)。一旦在服务器上,启动R,然后执行M-x ess-remote
使ESS知道现有的R session 。这样,您根本就不必依赖TRAMP。