TCL检查环境变量

jsp*_*ada 4 tcl environment-variables renderman

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

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

有任何想法吗?

Don*_*ows 6

您可能想要检查实际设置的环境变量; 我认为这不是USER保证之一.

RAT::LogMsg INFO "Got these env-vars: [lsort [array names ::env]]"
Run Code Online (Sandbox Code Playgroud)

如果puts stdout适用于您的环境,您可以尝试:

parray ::env
Run Code Online (Sandbox Code Playgroud)

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


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

RAT::LogMsg INFO "Username is $::tcl_platform(user)"
Run Code Online (Sandbox Code Playgroud)

我刚刚注意到文档是错误的:它表示user元素来自USER和/或LOGNAME环境变量.它没有,也没有至少8.5和8.6.(这绝对是我的错误.当我修复它时,我忘了更新代码.哎呀!)


Str*_*tr. 1

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

% if {[info exists ::env(USER)]} {puts "found $::env(USER)"}
found strobel
% 
Run Code Online (Sandbox Code Playgroud)

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