因此,我一直试图为此找到答案,但在互联网上找不到答案。我需要检查是否存在环境变量。我以为我有正确的代码,但它一直返回错误。
if { [info exists ::env(USER)] } {
RAT::LogMsg INFO "Found USER"
} else {
RAT::LogMsg INFO "Nope!"
}
有任何想法吗?
因此,我一直试图为此找到答案,但在互联网上找不到答案。我需要检查是否存在环境变量。我以为我有正确的代码,但它一直返回错误。
if { [info exists ::env(USER)] } {
RAT::LogMsg INFO "Found USER"
} else {
RAT::LogMsg INFO "Nope!"
}
有任何想法吗?
您可能想检查实际设置了哪些环境变量;我不认为这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 中也没有。(这绝对是我的错误。我在修复这个问题时忘记更新代码。哎呀!)
你有正确的代码,在 tclsh 中测试:
% if {[info exists ::env(USER)]} {puts "found $::env(USER)"}
found strobel
%
问题一定出在您的环境中。