Здається, що просте виклик оболонки у вашій системі не успадковує псевдонім (або функцію), за допомогою якої визначено module
, тому оболонка не в змозі її знайти (див. Нижче примітку з уривками). Спробуйте type module
з підказки побачити, як module
це визначено на даний момент.
По суті з джерелом , як якщо ви пишете кожен рядок сценарію з клавіатури.
Зауважте, що з одного боку ви успадковуєте всю конкретну історію поточної оболонки, але, з іншого, поточна оболонка буде піддаватися всім сторонам ефекту вашого сценарію та module
виклику.
Про відмінності між джерелом сценарію та його виконанням ви можете прочитати на SuperUser Sep 2009 або Dec 2009 , Ubuntu Feb 2011 , Unix Aug 2011 , Stackoverflow Dec 2012 або в багатьох інших місцях.
У зв'язку з цим в Modulefiles розділі є попередження :
... Змінні середовища не встановлюються під час завантаження файлу модуля. Таким чином, можна завантажити файл модуля і потім вивантажити його, не змінюючи змінні середовища в попередній стан.
Тож здається розумнішим виконати це в сценарії .
Для виконання останнього я можу подумати:
Використовувати інтерактивну оболонку , нехтуючи конкретною історією теперішньої оболонки, модифікуючи шебанг вашого сценарію
#!/bin/bash -i
Інтерактивна оболонка зчитує команди з вводу користувача на tty. Крім усього іншого, така оболонка зчитує файли запуску під час активації, відображає підказку та дозволяє контролювати роботу за замовчуванням ...
Якщо замість цього ви віддаєте перевагу успадковувати конкретний сюжет нинішньої оболонки, ви можете спробувати її джерело ... але в нижній частині
( source runit.sh )
Спробуйте знайти поточний псевдонім / функцію з, module
а type module
потім змінити, як наслідок, ваш сценарій. Зауважте, що деякі змінні середовища не можна встановити для module
.
Якщо ви хочете, ви можете знайти сценарії ініціалізації в каталозі $MODULESHOME/init/<shell>
.
Коментар
Як пам’ятали в Q&A модулів
Дочірній процес (сценарій) не може змінити середовище батьківського процесу. Завантаження модуля в сценарії впливає лише на середовище для самого сценарію. Єдиний спосіб зміни сценарію для скрипту - це джерело сценарію, який читає його в поточному процесі.
Отже, якщо ви хочете уникнути зміни поточного середовища, я вважаю, що краще спробувати змінити shebang (1) або створити скрипт у нижній частині (2). Я не повністю впевнений у застосуванні справи (3).
Примітка
Уривки зі сторінок керівництва та опису модулів
module
є інтерфейсом користувача до пакету Модулі. module
Ім'я користувача або функція виконує modulecmd
програму і має оболонку оцінити висновок команди. Перший аргумент для modulecmd
визначення типу оболонки.
Пакет Модулі та module
команда ініціалізуються, коли специфічний для оболонки сценарій ініціалізації розміщений у оболонці . Сценарій створює команду модуля або як псевдонім або оболонку, створює змінні середовища Модулі