5

因此,我一直试图为此找到答案,但在互联网上找不到答案。我需要检查是否存在环境变量。我以为我有正确的代码,但它一直返回错误。

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

有任何想法吗?

4

2 回答 2

7

您可能想检查实际设置了哪些环境变量;我不认为这USER是保证之一。

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

如果puts stdout在您的环境中工作,您可以尝试执行以下操作:

parray ::env

(该parray命令是一个漂亮地打印数组的过程。)


要可靠地获取当前用户名,请检查tcl_platform数组的user元素。该数组是由 Tcl 内部生成的(好吧,通过对相关基本 OS API 的探测)而不是通过查看环境变量来生成,并且该特定元素始终至少在 Tcl 8.4 中出现。

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

我刚刚注意到文档是错误的:它说user元素来自USER和/或LOGNAME环境变量。它没有,至少在 8.5 和 8.6 中也没有。(这绝对是我的错误。我在修复这个问题时忘记更新代码。哎呀!)

于 2014-05-06T21:42:19.070 回答
0

你有正确的代码,在 tclsh 中测试:

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

问题一定出在您的环境中。

于 2014-05-06T19:53:15.933 回答