web-dev-qa-db-ja.com

Perlスクリプトを実行しているユーザーの名前を取得するにはどうすればよいですか?

スクリプトの実行元のユーザー名を知る必要があるスクリプトがあります。

シェルから実行すると、bashが提供する$ ENV {"USER"}を簡単に使用できます。

しかし、明らかに-その後、同じスクリプトがcronから、またbash経由で実行されます-$ ENV {"USER"}が定義されていません。

もちろんできます:

my $username = getpwuid( $< );

しかし、それは素敵に見えません-より良い/より良い方法はありますか?スクリプトは私の個人的な使用であり、Linuxでのみ実行されるため、システムに依存する必要はありません。

25
user80168

crontabセット$LOGNAMEなので、$ENV{"LOGNAME"}$LOGNAMEも私の環境でデフォルトで設定されています(ただし、設定されている場所は確認していません)。したがって、$LOGNAME の代わりに $USER

ハッカーには同意しますが、getpwuidの何が問題なのかわかりません。

9
Vinko Vrsalovic

いくつかの場所から回答を取得してみてください。最初のものが勝ちます。

my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<);
49
glenn jackman

これはきれいに見えますか?

use English qw( −no_match_vars );

my $username = getpwuid $UID;
8
Chas. Owens

申し訳ありませんが、なぜ「見栄え」が良くないのですか?これは、使用する適切なシステムコールです。外部プログラムを呼び出したい場合(たとえば、bashスクリプトからも使用できるもの)、/ usr/bin/idおよび/ usr/bin/whoamiのツールが使用できます。

2
Andy Ross