2011-04-01 168 views

回答

25

使用$::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的環境變量。你讀過我給你的鏈接了嗎? – TrojanName 2011-04-01 11:17:43

4
$ 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

2

環境變量是通過訪問內置的全局變量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

1

要閱讀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