2010-08-19 6 views
13

Wie erhält man den aktuellen Benutzer auf tragbare Weise?Wie bekomme ich den aktuellen Benutzer in Perl auf tragbare Weise?

Dies scheint wie eine FAQ, aber perlport spricht nicht darüber, vielleicht weil einige seltsame Systeme nicht das Konzept der "Benutzer" haben mit zu sein? Bleiben wir jedoch bei * nix und Windows.

getpwuid($>) ist nicht unter Windows implementiert.

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

http://search.cpan.org nicht viel gedreht.

+0

ist dies ein CGI-Skript oder eine Skripterstellung (Skript-App)? – vol7ron

Antwort

19

getlogin:

Dies implementiert die C-Library-Funktion mit dem gleichen Namen, die auf den meisten Systemen die aktuelle Login kehrt von/etc/utmp, falls vorhanden. Wenn null, benutze "getpwuid".

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

Nicht "getlogin" für die Authentifizierung betrachten: es ist nicht so sicher wie "getpwuid".

Sie können auch versuchen || -ing dies mit POSIX::cuserid() und Win32::LoginName().

+7

Wenn Sie Benutzer mit su gewechselt haben, wird getlogin den ursprünglichen Benutzer zurückgeben, etwas, das eine unangenehme Überraschung für mich als Benutzer wäre; Verwenden Sie einfach getpwuid für posixy-Systeme und Win32 :: LoginName für Windows. – ysth

+0

@ysth: Gut zu wissen. Ich erwarte, dass die Dokumente in "Nicht in Betracht ziehen ... zur Authentifizierung" darauf anspielen. – Ether

4

Win32::LoginName() kann unter Windows verwendet werden, um den Benutzernamen abzurufen (ohne den Domain-Namen, es kann so vieldeutig sein):

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

Win32::pwent implementiert getpwuid() und andere Funktionen, um die Benutzer-Datenbank abzufragen. Leider konnte es nicht auf meinem StrawberryPerl 5.12 installiert werden.

Verwandte Themen