TCL Проверка переменных среды
Поэтому я пытался найти ответ на этот вопрос немного и не мог найти ответ в Интернете. Мне нужно проверить, существует ли переменная окружения. Я думал, что у меня был правильный код, но он продолжает возвращать false.
if { [info exists ::env(USER)] } {
RAT::LogMsg INFO "Found USER"
} else {
RAT::LogMsg INFO "Nope!"
}
Есть идеи?
2 ответа
Вы можете проверить, какие переменные среды на самом деле установлены; Я не думаю что USER
является одним из гарантированных.
RAT::LogMsg INFO "Got these env-vars: [lsort [array names ::env]]"
Если puts stdout
работает в вашей среде, вы можете попробовать сделать:
parray ::env
(The parray
команда - это процедура, которая красиво печатает массив.)
Чтобы получить текущее имя пользователя, проверьте tcl_platform
массиваuser
стихия Этот массив создается внутренне с помощью Tcl (ну, с пробами на соответствующие базовые 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
%
Проблема должна быть в вашей среде.