Когато TRAMP изпълни команда на shell на отдалечения хост, тя извиква /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