如何阻止IBM LSF module unload时执行modulefile中的exec命令
问题原因
你的代码存在Tcl语法错误:Tcl的if后花括号包裹的是表达式上下文,直接写is-loaded、module-info这类命令名会被解析为未定义的裸词变量,不会被作为命令执行,因此触发无效裸词报错。
正确写法
你可以根据需求选择以下任意一种正确写法:
方案1:仅在load操作时执行(推荐,匹配你的需求)
该写法会在每次执行module load(包括重新加载场景)时执行exec命令,module unload时完全不触发:
if { [module-info command] eq "load" } { exec .venv/bin/python mypython.py }
方案2:仅在模块首次加载时执行
该写法仅当模块从未加载状态变为加载状态时执行exec,重复执行module load不会重复触发:
if { ![is-loaded mymodule] } { exec .venv/bin/python mypython.py }
语法说明
- 方括号
[]在Tcl中表示命令替换,会先执行括号内的命令,将返回值代入外层表达式参与判断 - 第一种方案中
[module-info command]会返回当前正在执行的模块操作类型(load/unload/switch等),和字符串load做相等判断即可匹配加载场景
内容的提问来源于stack exchange,提问作者Aesir
相关产品推荐
相关产品推荐

