我正在使用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 RHow can I specify the R version opened by ESS session in emacs?)

最佳答案

TL; DR

  • 标识R模块的路径:module show R/3.0.1
  • 添加到您的.emacs:(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。

    10-05 17:47