Предотвратить выполнение команды exec при выгрузке модуля ibm load sharing facilty
У меня есть сценарий tcl, который представляет собой файл модуля в IBM Load Sharing Facitily (lsf), используемый для настройки некоторых переменных среды и запуска сценария Python с помощью команды.
Когда модуль обычно выгружается, выполняются противоположные всем командам команды, но также команда выполняется как обычно. Я хотел бы, чтобы
exec
часть работает только на
module load
а не на
module unload
.
Вот что я пробовал до сих пор
if { !(is-loaded mymodule)} {
exec .venv/bin/python mypython.py
}
Я также пробовал это
if { module-info command load } {
exec .venv/bin/python mypython.py
}
Для каждого я получаю аналогичную ошибку
Module ERROR: invalid bareword "module"
in expression " module-info command [load] ";
should be "$module" or "{module}" or "module(...)" or ...
оба исключения жалуются либо на недопустимое голое слово («есть», либо на «модуль») в зависимости от того, какой фрагмент я пробую. Является ли мой snytax недействительным?
1 ответ
Мой синтаксис был неправильным, в конце концов я смог решить проблему следующим образом:
set is_load_command [module-info command load]
if { $is_load_command == 1 } {
exec .venv/bin/python mypython.py
}
У меня было две проблемы, правильное понимание сравнений в tcl и использование возвращаемых значений из вызываемой функции. Никто не вел себя так, как я привык.