2014-05-06 173 views
3

所以我一直在試圖找到一個答案這一點,並無法在互聯網上找到答案。我需要檢查是否存在環境變量。我以爲我有正確的代碼,但它不斷返回false。TCL檢查環境變量

if { [info exists ::env(USER)] } { 
    RAT::LogMsg INFO "Found USER" 
} else { 
    RAT::LogMsg INFO "Nope!" 
} 

任何想法?

+2

試過'[info exists :: env(USERNAME)]'?您可以使用parray env來查看數組的所有元素及其值。 – Jerry

回答

0

你有正確的代碼,測試在tclsh的:

% if {[info exists ::env(USER)]} {puts "found $::env(USER)"} 
found strobel 
% 

的問題必須在您的環境。

5

您可能想要檢查實際設置的環境變量;我不認爲USER是保證的之一。

RAT::LogMsg INFO "Got these env-vars: [lsort [array names ::env]]" 

如果puts stdout作品在你的環境,你可以嘗試做:(該parray命令是漂亮,打印陣列的過程)

parray ::env 


要獲得當前用戶名可靠,請查看tcl_platform array's user element。該數組是由Tcl在內部生成的(對於相關的基本操作系統API而言),而不是通過查看環境變量來生成,並且該特定元素始終存在於Tcl 8.4中。

RAT::LogMsg INFO "Username is $::tcl_platform(user)" 

我剛剛注意到,文件是錯誤的:它說,user元素來自USER和/或LOGNAME環境變量。 It doesn't,並且不在8.5和8.6中。 (這肯定是我的錯誤,當我解決這個問題時,我忘了更新代碼。)OOops!