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
% 

Проблема должна быть в вашей среде.

Другие вопросы по тегам