Существует хорошее небольшое учебное руководство в этом местоположении: http://atlas.evilpiepirate.org/git/linux-bcache.git/tree/Documentation/bcache.txt?h=bcache-dev (любил с основного веб-сайта BCACHE).
Смотрите на Getting Started
и ATTACHING
разделы. Если что-то конкретно не ясно, необходимо обновить вопрос, и мы могли бы возможно помочь еще немного.
, поскольку модуль
команда псевдонима или оболочки
(см. « инициализация пакета » в
Модуль (1) ).
Когда вы говорите источник runit.sh
, это как вводить команду module
непосредственно в вашу интерактивную оболочку.
Но когда вы говорите ./ Runit.sh
, вы используете новую, не интерактивную оболочку.
Неинтерактивные снаряды
Как правило, не имеют стандартных псевдонимов и функций оболочки.
модуль (1) говорит,
«Пакет модулей и модуль команда инициализированы
Когда скрипт инициализации, специфичный оболочкой, получен в оболочку.
Сценарий создает модуль команда ,
либо как функция псевдонима или оболочки, ... »
Если вам нужно запустить команду модуль
в скрипте,
Найдите скрипт инициализации, который определяет модуль
и источник
его из скрипта.
Похоже, что простая вызов оболочки в вашей системе не наследует псевдоним (или функцию), с которым определяется модуль
, поэтому оболочка не может ее найти (см. Примечание с выдержками). Попробуйте Тип модуля
из приглашения, чтобы увидеть, как модуль
в данный момент определен.
По сути с источником , как если вы пишете каждую строку скрипта с клавиатуры.
Обратите внимание, что на одной стороне вы наследуете всю конкретную историю нынешней оболочки, но с другой стороны, текущая оболочка будет подвергаться влиянию на все стороны вашего сценария и модуля
.
О Различия между к источнику скрипта и выполнения его Вы можете прочитать на Superuser SEP 2009 или DECA 2009 , Ubuntu Feb 2011 , Unix Авг 2011 , Stackoverflow Дек 2012 г. или во многих других местах.
В этом отношении в разделе Modulefiles В предупреждение :
:
... Переменные среды неселены при разгрузке модулейфила. Таким образом, можно загрузить модульфиль, а затем выгрузить его без переменных среды возвращается к своему предыдущему состоянию.
Так кажется более мудрым выполнить его в скрипте .
Для достижения последнего я могу подумать:
использовать интерактивную оболочку , пренебрегая конкретной историей нынешней оболочки, изменяя Shebang вашего скрипта с
#! / bin / bash -i
Интерактивная оболочка читает команды от ввода пользователя на TTY. Среди прочего, такая оболочка читает файлы запуска на активации, отображает подсказку и обеспечивает управление заданием по умолчанию ...
Если вместо этого вы предпочитаете унаследовать конкретную историю нынешней оболочки, вы можете попытаться исходить его. .. но в подставке
(источник runit.sh)
Попробуйте найти текущий псевдоним / функцию модуля
с модулем
модулем типа
, затем измените вследствие вашего скрипта. Примечание. Некоторые переменные окружающей среды не могут быть установлены для модуля.
Если вы хотите, вы можете найти сценарии инициализации в каталоге$ модулешом / init /
.
Комментарий
Как запомнено в Q & A модулейДетский процесс (скрипт) не может изменить среду родительского процесса. Нагрузка на модуль в сценарии влияет на окружающую среду для сама сценария. Единственный способ, которым вы можете иметь сценарий, изменение текущей среды - это источник сценария, который читает его в текущий процесс.
Итак, если вы хотите избежать изменений текущей среды, я думаю, что лучше попытаться изменить Shebang (1) или исходный сценарий в подпункте (2). Я не совсем уверен в удобствах использования случая (3).
Примечание
Выдержки из ручного и описания страниц модуля модуля
- пользовательский интерфейс для пакета модулей. Модуль
псевдоним или функция выполняет программу
Modulecmd
и имеет оболочку, оценивая вывод команды. Первый аргументModulecmd
определяет тип оболочки.Пакет модулей и модуль
модуль
инициализируются при использовании скрипта специфического инициализации оболочек в оболочке . Скрипт создает команду модуля, либо в качестве функции псевдонима или оболочки, создает переменные среды модулей