阅读TCL中的Bash环境变量
$ export var=42
$ tclsh
% puts $env(var)
42
TMP环境变量是在bash脚本中定义的。所以我想要做的只是访问tcl中的环境变量。我的tcl提示符是%。所以最后我想访问tcl中的环境变量。 – 2011-04-01 09:03:53
TMP环境变量将是$ env(TMP)。 **但**:tcl脚本是从bash脚本中调用的吗?变量全局(即出口)? – hynek 2011-04-01 09:06:54
是的。它工作正常。但我的问题是,什么环境变量是在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 wiki和the env section of the tclvars man page
是的,你的过程被执行,它给出了所有的环境变量。没关系。但我在这里问。假设在bash脚本中,如果我像这样定义用户定义环境:ORACLE_SID = DBTEST ORACLE_HOME =/opt/oracle/product/102 export ORACLE_SID ORACLE_HOME现在我想在tcl中编写一个proc来访问用户定义的环境变量。所以我该怎么做。请.......... – 2011-04-02 05:29:33
我也读过你的链接。但这与我的要求不符。 – 2011-04-02 05:49:05
我想在转储环境变量时使用'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。
只要我写你的代码并执行它。但我没有得到。我在tclsh提示符下。我的提示是%。所以我只是输入提示%set tmpdir $ :: env(TMP)。输出就像不能读取“:: env(TMP)”:没有这样的变量 – 2011-04-01 08:58:09
其实我想写一个proc是tcl,它返回Bash环境变量的值。 – 2011-04-01 09:39:46
这是因为您没有名为TMP的环境变量。你读过我给你的链接了吗? – TrojanName 2011-04-01 11:17:43