当 TRAMP 在远程主机上运行 shell 命令时,它会调用/bin/sh -c
. 当像这样调用它时,似乎没有办法告诉sh
在初始化时获取任何文件。因此,让我们将 TRAMP 配置为调用/bin/bash -c
. 然后bash
将 source BASH_ENV
,我们可以指向一个配置模块的自定义文件。
因此,首先,将 TRAMP 配置为使用/bin/bash
. 为此,我们需要修改tramp-methods
变量。它是一个 alist,其中的键是表示连接类型的字符串。我使用"scpx"
连接类型,但您可以将其更改为您使用的任何连接类型。
(let ((scpx-method (cdr (assoc "scpx" tramp-methods))))
(add-to-list 'scpx-method '(tramp-remote-shell "/bin/bash"))
(add-to-list 'tramp-methods (cons "scpx" scpx-method)))
然后,我们可以配置tramp-remote-process-environment
为指向将包含我们的模块配置的文件。
(add-to-list 'tramp-remote-process-environment "BASH_ENV=~/.bash_env")
然后,打开~/.bash_env
远程机器上的文件。您需要获取设置模块系统的文件。我们使用不同的模块系统,所以我不完全确定您需要什么文件,但也许您会在/etc/profile.d
. 这是我的文件包含的内容:
source /etc/profile.d/z00_lmod.sh
module -q restore
同样,我不熟悉您的模块系统,但第二行只是加载了我的默认模块集。
最后,由于模块系统配置了你的PATH
,我们需要让 TRAMP 使用它。默认情况下,TRAMP 仅使用tramp-remote-path
. 但如果你添加tramp-own-remote-path
,它会拉入PATH
.
(add-to-list 'tramp-remote-path 'tramp-own-remote-path)