2010-08-19 11 views
13

Come si ottiene l'utente corrente in modo portatile?Come si ottiene l'utente corrente in Perl in modo portatile?

Questa sembra una FAQ ma lo perlport non ne parla, forse perché alcuni sistemi dispari non hanno il concetto di "utente" con cui stare? Tuttavia, atteniamoci a * nix e Windows.

getpwuid($>) non è implementato su Windows.

$ENV{USER} || $ENV{USERNAME} sembra pignolo.

http://search.cpan.org non si presenta molto.

+0

è uno script CGI o una script (app di script)? – vol7ron

risposta

19

getlogin:

Questa implementa la funzione di libreria C con lo stesso nome, che su molti sistemi restituisce il login corrente da/etc/utmp, se presente. Se null, usa "getpwuid".

Non considerare "getlogin" per l'autenticazione: non è sicuro come "getpwuid".

Si può anche provare || -ing questo con POSIX::cuserid() e Win32::LoginName().

+7

Se hai cambiato utente con su, getlogin restituirà l'utente originale, qualcosa che sarebbe una spiacevole sorpresa per me come utente; basta usare getpwuid per i sistemi posixy e Win32 :: LoginName per windows. – ysth

+0

@ysth: buono a sapersi. Mi aspetto che questo sia ciò a cui alludevano i documenti in "Non considerare ... per l'autenticazione". – Ether

4

Win32::LoginName() può essere utilizzato su Windows per recuperare il nome utente (senza il nome del dominio, quindi potrebbe essere ambiguo):

use Win32; 
my $username = Win32::LoginName; 

Win32::pwent implementa getpwuid() e altre caratteristiche per interrogare il database degli utenti. Sfortunatamente, non è riuscito a installare sul mio StrawberryPerl 5.12.

Problemi correlati