从 tcl 模块调用 bash 函数来更改环境

问题描述 投票:0回答:2

我有一个 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

bash tcl
2个回答
0
投票

设置全局环境变量就足以设置环境变量了吗?例如:

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)

0
投票

模块文件可以定义特定的 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
© www.soinside.com 2019 - 2024. All rights reserved.