2010-12-13 7 views
9

Nie jestem do końca pewien, którego użyć.Jaka jest różnica między zmiennymi środowiskowymi "USER" i "USERNAME"?

+0

To w rzeczywistości nie jest specyficzne dla Ruby. Są to zmienne środowiskowe, które każdy typ skryptu lub pliku wykonywalnego może zobaczyć i wykorzystać. –

+0

Jestem bardziej zaniepokojony kompatybilnością z OS. Czy w instalacjach na komputerach Mac istnieje 'ENV ['USER']'? Czy 'ENV ['USER'] == ENV ['USERNAME']' w systemie Linux jest instalowany? Itp .. – RyanScottLewis

+0

W systemie Linux, czy masz "LOGNAME"? –

Odpowiedz

9

na oknach: ENV [ 'username'] wyświetli bieżący nazwa_użytkownika.

W systemie Linux: Jeśli skrypt jest uruchamiany przez sudo, "USER" będzie użytkownikiem sudo-ed-to (zwykle root), a "USERNAME" będzie użytkownikiem, który uruchomił sudo.

Zakładam Mac następujący model Linux, ale musisz sprawdzić (jestem w pracy i brak mac kłuć) :-)

Lista zmiennych XP Środowisko: http://vlaurie.com/computers2/Articles/environment.htm

a oto lista Vista/7 Środowiska powiadomienia variables..you'll są nieco inaczej: http://vlaurie.com/computers2/Articles/environment-variables-windows-vista-7.htm

Edit: najbezpieczniejszym rozwiązaniem byłoby napisać mały funkcję, która określa, jaki system jesteś na (i zbieraj z Twojego komentarza powyżej, gdy chcesz mieć aplikację Write-Once, Run-Anywhere) d na podstawie tego ustala odpowiednie wartości.

+0

Mam skrypt Bash 'echo $ USERNAME'. Kiedy uruchomię go za pomocą 'sudo./Name.sh', zawsze wypisze' root'. Więc nie jestem pewien co do stwierdzenia "USERNAME" będzie użytkownikiem, który uruchomił sudo'. Czy masz na to źródło? O ile mogę powiedzieć, "$ USER' i" $ USERNAME "są identyczne, chociaż w niektórych środowiskach' $ USERNAME' nie istnieje. – Nateowami

1

jeśli jest Ruby 1.8.6 lub 1.9.2, jest tylko ENV['USER'] (na Macu):

ruby-1.9.2-p0 > ENV.keys.grep /user/i 
=> ["USER", "__CF_USER_TEXT_ENCODING"] 
+0

Zobacz, jestem na Ruby 1.9.2 na Win 7 i mam zarówno 'ENV [" USER "]' oraz 'ENV [" USERNAME "]' – RyanScottLewis