【问题标题】:Detect environment variable change in Tcl检测 Tcl 中的环境变量变化
【发布时间】:2021-05-27 09:30:00
【问题描述】:

在执行 Tcl 脚本期间有什么方法可以检测环境变量的变化(我使用 Tk,所以执行时间可能很长)? 例如,如果我定义了一个环境变量 MYVAR=1,那么我可以通过编写 $ENV(MYVAR) 从 Tcl 访问它。现在假设在执行 Tcl 程序期间,我将 MYVAR 切换为 2。有没有办法,或者可能是一个命令,再次扫描每个环境变量,以便在我调用 $ENV(MYVAR) 时得到 2?

【问题讨论】:

    标签: environment-variables tcl


    【解决方案1】:

    首先,其他进程不会看到任何进程的环境变量的变化。孩子们在创建时会获得当前环境的副本,仅此而已。

    其次,要查看环境变量的变化,请将trace 放在::env 变量上(但不建议跟踪单个变量)。我不记得这在线程之间是否可靠地工作,但在一个线程中,如果你没有 C 代码修改你背后的变量,那就很好了。

    proc detectChange {name1 name2 op} {
        # We know what name1 and op are in this case; I'll ignore them
        if {$name2 eq "MYVAR"} {
            puts "MYVAR changed to $::env(MYVAR)"
        }
    }
    trace add variable ::env write detectChange
    

    请注意,Tk 在内部大量使用了跟踪(但它们使用的是 C API,而不是它们的 Tcl 语言 API)。

    【讨论】:

      猜你喜欢
      • 2020-01-23
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多