tcl文件无法获取通过代码设置的环境变量

时间:2019-03-25 10:18:50

标签: c++ linux windows tcl xilinx

我已经使用putenv通过代码设置了环境变量。我正在通过tcl文件读取环境变量。在Windows中,这似乎显示以下内容 错误:无法读取“ env(myvar)”:没有这样的变量,  没有这样的变量     (请参阅“ env(myvar)”上的跟踪记录)     从内部调用  “放入$ env(myar)”

但是在Linux中错误不会出现。

putenv用于设置环境变量 $ env()在tcl文件中用于获取环境。

1 个答案:

答案 0 :(得分:1)

这是已知的,并且是由于以下事实造成的:如果我们更精确地同步,那么从Tcl中对环境变量的所有访问都会受到更大的性能损失,这是一种比您实际使用的情况更为普遍的用例。从C代码更改环境变量。 (putenv()系统调用没有提供任何我们可以有效地钩住以检测更改的内容,因此我们最终不得不从头开始重新组装整个env数组;这被发现是一个重大瓶颈)

最简单的解决方法是让您在Tcl中创建一些额外的命令(但用C编写),该命令直接包装getenv()调用,以便您可以将其与怀疑已被更改的环境变量一起使用Tcl回来了。

int WrapGetEnv(ClientData ignored, Tcl_Interp *interp, int argc, char *argv[]) {
    if (argc != 2) {
        // Probably ought to be a better error here
        return TCL_ERROR;
    }
    char *var = argv[1];
    char *val = getenv(var);
    if (val != NULL) {
        Tcl_SetResult(interp, val, TCL_DYNAMIC);
    }
    return TCL_OK;
}

// ... in the right place do this ...
Tcl_CreateCommand(interp, "getenv", WrapGetEnv, NULL, NULL);