Когда TRAMP запускает команду оболочки на удаленном хосте, она вызывает /bin/sh -c
. Кажется, нет способа указать sh
на источник каких-либо файлов при инициализации, когда он вызывается таким образом. Так что давайте вместо этого настроим TRAMP для вызова /bin/bash -c
. Затем bash
будет источником BASH_ENV
, который мы можем указать на пользовательский файл, который настраивает модули.
Итак, сначала настройте TRAMP для использования /bin/bash
. Для этого нам нужно изменить переменную tramp-methods
. Это список, где ключами являются строки, обозначающие тип соединения. Я использую тип подключения "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)
person
Daniel Matz
schedule
14.12.2017