3

我总是忘记如何在 Perl 中做到这一点。这是我的脚本:

#!/usr/local/bin/perl -w
use strict;
use Data::Dumper;

my @got = getpwent();
my $username    = ${[getpwent()]}[0];

print Dumper( @got );
print "username is [$username]\n";

...这是它产生的输出...

$VAR1 = 'root';
$VAR2 = 'xxxxxxxxxxxxxxxxxx';
$VAR3 = 0; 
$VAR4 = 0;
$VAR5 = ''; 
$VAR6 = '';
$VAR7 = 'myhost root';
$VAR8 = '/root';
$VAR9 = '/bin/bash';
username is [bin]

...我的问题是,为什么用户名等于“bin”而不是“root”?

4

2 回答 2

5

它迭代用户;您调用它两次,并获取两个用户的信息。

$ perl -E 'say $foo while $foo = getpwent()'
root
daemon
bin
sys
sync
...
于 2013-01-18T18:33:00.683 回答
3

重复调用以getpwent返回密码文件(或getpwent正在使用的任何用户信息源)中的不同行。

root是密码文件中列出的第一个用户,bin是第二个。

调用endpwent重置迭代器并将您之前的调用复制到getpwent

for (0..2) {
    print scalar getpwent(), "\n";
}
print "-- reset --\n";
endpwent();
for (0..3) {
    print scalar getpwent(), "\n";
}

输出 (YMMV)

SYSTEM
LocalService
NetworkService
-- reset --
SYSTEM
LocalService
NetworkService
Administrators
于 2013-01-18T18:33:04.933 回答