2014-05-06 143 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!