スクリプトの実行元のユーザー名を知る必要があるスクリプトがあります。
シェルから実行すると、bashが提供する$ ENV {"USER"}を簡単に使用できます。
しかし、明らかに-その後、同じスクリプトがcronから、またbash経由で実行されます-$ ENV {"USER"}が定義されていません。
もちろんできます:
my $username = getpwuid( $< );
しかし、それは素敵に見えません-より良い/より良い方法はありますか?スクリプトは私の個人的な使用であり、Linuxでのみ実行されるため、システムに依存する必要はありません。
crontabセット$LOGNAME
なので、$ENV{"LOGNAME"}
。 $LOGNAME
も私の環境でデフォルトで設定されています(ただし、設定されている場所は確認していません)。したがって、$LOGNAME
の代わりに $USER
。
ハッカーには同意しますが、getpwuid
の何が問題なのかわかりません。
いくつかの場所から回答を取得してみてください。最初のものが勝ちます。
my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<);
これはきれいに見えますか?
use English qw( −no_match_vars );
my $username = getpwuid $UID;
申し訳ありませんが、なぜ「見栄え」が良くないのですか?これは、使用する適切なシステムコールです。外部プログラムを呼び出したい場合(たとえば、bashスクリプトからも使用できるもの)、/ usr/bin/idおよび/ usr/bin/whoamiのツールが使用できます。