2009-09-04 14 views
25

Mam skrypt, który musi wiedzieć, z jakiej nazwy użytkownika jest uruchamiany.Jak mogę uzyskać nazwę użytkownika wykonującego mój skrypt Perla?

Po uruchomieniu go z powłoki, mogę łatwo użyć $ ENV {"USER"}, który jest dostarczany przez bash.

Ale podobno - to ten sam skrypt uruchamiany jest z crona, również przez bash - $ ENV {"USER"} nie jest zdefiniowany.

Oczywiście, mogę:

my $username = getpwuid($<); 

Ale to nie wyglądają ładnie - jest jakiś lepszy/ładniejszy sposób? Nie musi być niezależny od systemu, ponieważ skrypt jest przeznaczony do użytku osobistego i będzie działał tylko na Linuksie.

Odpowiedz

9

Zestawy crontab $LOGNAME, dzięki czemu można używać $ENV{"LOGNAME"}. $LOGNAME jest również domyślnie ustawiona w moim środowisku (nie sprawdzono, gdzie jest ustawiona), więc możesz użyć tylko $LOGNAME zamiast $USER.

Chociaż zgadzam się z hakerami, nie wiem, co jest nie tak z getpwuid.

2

Przepraszam, dlaczego to "nie wygląda ładnie"? To jest odpowiednie wywołanie systemowe do użycia. Jeśli chcesz wywołać program zewnętrzny (na przykład coś, czego możesz użyć również ze skryptu Bash), dostępne są narzędzia/usr/bin/id i/usr/bin/whoami.

8

Czy to wygląda ładniej?

use English qw(−no_match_vars); 

my $username = getpwuid $UID; 
+2

He. W moim prawdziwym kodzie, ja (oczywiście) używam angielskiego, a ja faktycznie używam $ REAL_USER_ID, ale nie chcę wywoływać tutaj debaty "Angielskie kontra skrócone imiona" :) –

+0

W moim kodzie użyłbym ' $ <', więc to nie jest debata, na której mi zależy, ale myślałem, że możesz uważać to za ładniejsze. –

45

Spróbuj znaleźć właściwą odpowiedź spośród kilku miejscach, pierwszy wygrywa:

my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<); 
Powiązane problemy