阅读TCL中的Bash环境变量

问题描述:

如何读取Tcl脚本中的shell环境变量。 所以任何人都请帮助我。我在TCL很新。阅读TCL中的Bash环境变量

使用$::env可以访问任何环境变量,例如访问TMP环境变量做到这一点:

set tmpdir $::env(TMP) 

这里更多信息http://wiki.tcl.tk/1624

+0

只要我写你的代码并执行它。但我没有得到。我在tclsh提示符下。我的提示是%。所以我只是输入提示%set tmpdir $ :: env(TMP)。输出就像不能读取“:: env(TMP)”:没有这样的变量 – 2011-04-01 08:58:09

+0

其实我想写一个proc是tcl,它返回Bash环境变量的值。 – 2011-04-01 09:39:46

+1

这是因为您没有名为TMP的环境变量。你读过我给你的链接了吗? – *Name 2011-04-01 11:17:43

$ export var=42 
$ tclsh 
% puts $env(var) 
42 
+0

TMP环境变量是在bash脚本中定义的。所以我想要做的只是访问tcl中的环境变量。我的tcl提示符是%。所以最后我想访问tcl中的环境变量。 – 2011-04-01 09:03:53

+0

TMP环境变量将是$ env(TMP)。 **但**:tcl脚本是从bash脚本中调用的吗?变量全局(即出口)? – hynek 2011-04-01 09:06:54

+0

是的。它工作正常。但我的问题是,什么环境变量是在bash或shell脚本中定义的,只是我想使用tcl中的proc进行访问。所以请........ – 2011-04-01 09:08:55

环境变量是通过访问内置的全局变量env(完全合格是::env)。你可以像使用其他Tcl数组一样使用它。

如果你想打印所有环境变量的列表,你可以使用这样的事情:

proc dump_env_vars {} { 
    foreach name [array names ::env] { 
     puts "$name == $::env($name)" 
    } 
} 

当然,访问只是你使用它像任何其他阵列中的单个变量,例如:

puts "HOME = '$::env(HOME)'" 

欲了解更多信息,请参阅env page on the Tcler's wikithe env section of the tclvars man page

+0

是的,你的过程被执行,它给出了所有的环境变量。没关系。但我在这里问。假设在bash脚本中,如果我像这样定义用户定义环境:ORACLE_SID = DBTEST ORACLE_HOME =/opt/oracle/product/102 export ORACLE_SID ORACLE_HOME现在我想在tcl中编写一个proc来访问用户定义的环境变量。所以我该怎么做。请.......... – 2011-04-02 05:29:33

+0

我也读过你的链接。但这与我的要求不符。 – 2011-04-02 05:49:05

+0

我想在转储环境变量时使用'parray env'。 – 2011-04-02 07:34:48

要阅读Tcl脚本对shell环境变量,尝试做这样的事情:

global env 
set olddisplay $env(DISPLAY) 
set env(DISPLAY) unix:0 

这可能会以这种方式来表达,以及:

set olddisplay $::env(DISPLAY) 
set ::env(DISPLAY) unix:0 

,忘记global

您可以检查是否通过执行类似存在的变量:

if {[info exists env(VARNAME)]} { 
    # okay, it's there, use it 
    set value $env(VARNAME) 
} else { 
    # the environment var isn't set, use a default 
    set value "the default value" 
} 

这是source