2010-08-19 17 views
13

¿Cómo se obtiene al usuario actual de forma portátil?¿Cómo obtengo el usuario actual en Perl de manera portátil?

Parece una pregunta frecuente, pero perlport no habla de ello, ¿quizás porque algunos sistemas extraños no tienen el concepto de "usuario"? Sin embargo, sigamos con * nix y Windows.

getpwuid($>) no está implementado en Windows.

$ENV{USER} || $ENV{USERNAME} seem finicky.

http://search.cpan.org no apareció mucho.

+0

¿es este un script CGI o un scriplication (aplicación de script)? – vol7ron

Respuesta

19

getlogin:

Esto implementa la función de biblioteca C del mismo nombre, que en la mayoría de los sistemas devuelve el inicio de sesión actual de/etc/utmp, en su caso. Si es nulo, use "getpwuid".

$login = getlogin || getpwuid($<) || "Kilroy"; 

No considere "getlogin" para la autenticación: no es tan seguro como "getpwuid".

También puede intentar || -esto con POSIX::cuserid() y Win32::LoginName().

+7

Si ha cambiado usuarios con su, getlogin devolverá el usuario original, algo que sería una sorpresa desagradable para mí como usuario; solo use getpwuid para sistemas posixy y Win32 :: LoginName para windows. – ysth

+0

@ysth: es bueno saberlo. Supongo que esto es a lo que los documentos aludían en "No consideren.para la autenticación". – Ether

4

Win32::LoginName() se puede utilizar en Windows para recuperar el nombre de usuario (sin el nombre de dominio, por lo que puede ser ambiguo):

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

Win32::pwent implementa getpwuid() y otras características para consultar la base de datos de usuario. Desafortunadamente, no se pudo instalar en mi StrawberryPerl 5.12.

Cuestiones relacionadas