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]

...そして私の質問は、なぜユーザー名が「root」ではなく「bin」に等しいのですか?

4

2 に答える 2

5

ユーザーを反復処理します。2 回呼び出して、2 人のユーザーの情報を取得しています。

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

getpwentパスワードファイル(またはユーザー情報のソースが使用されているもの)で異なる行を返すための呼び出しを繰り返しますgetpwent

rootはパスワード ファイルにリストされている最初のユーザーで、binは 2 番目のユーザーです。

を呼び出し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 に答える