我有一个 bash 函数
myEnv
,它可以加载多个环境,并且我还使用多个模块。例如,要设置我的环境,我可能会这样做
#!/usr/bin/env bash
myEnv program1
myEnv program2
module load program3
module load program4
我想在一个模块中处理所有这些事情。不幸的是,
tcl
不支持执行myEnv
来更改环境。除了重构 myEnv
的工作方式之外,还有没有办法在单个 myEnv
中从 tcl
调用 module
来解决这个问题?
我想编写一个模块,比如说,
programs1234
,这样我就可以做module load programs1234
并处理两个myEnv
和两个module load
。
设置全局环境变量就足以设置环境变量了吗?例如:
set env(FOO) "Test variable foo"
set env(BAR) "One more variable"
...
# Execute a tcl program in the env configured above.
exec [info nameofexecutable] -f program3
例如,如果 program3 打印出 env(FOO) 和 env(BAR),您将看到这些值。
puts $env(FOO)
puts $env(BAR)
模块文件可以定义特定的 shell 内容(常规环境变量定义除外)以在当前 shell 会话中进行评估。
此 shell 内容应使用 Tcl
puts
命令直接发送到 stdout 通道。
它将包含在由
modulecmd
脚本生成的 shell 代码中,然后在当前 shell 会话中对其进行评估。
您要编写的
programs1234
模块文件可能如下所示:
#%Module
puts stdout {myEnv program1}
puts stdout {myEnv program2}
module load program3
module load program4