如何获取执行Perl脚本的用户的名称?

26 linux perl

我有一个脚本,需要知道它运行的用户名.

当我从shell运行它时,我可以很容易地使用由$ bash提供的$ ENV {"USER"}.

但显然 - 然后相同的脚本从cron运行,也通过bash运行 - $ ENV {"USER"}未定义.

当然,我可以:

my $username = getpwuid( $< );
Run Code Online (Sandbox Code Playgroud)

但它看起来不太好 - 有没有更好/更好的方式?它不必独立于系统,因为该脚本仅供我个人使用,并且只能在Linux上运行.

gle*_*man 50

尝试从几个地方获得答案,首先获胜:

my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<);
Run Code Online (Sandbox Code Playgroud)


Vin*_*vic 9

crontab设置,$LOGNAME以便您可以使用$ENV{"LOGNAME"}.$LOGNAME默认情况下也在我的环境中设置(虽然没有看到它设置的位置)所以你可能只能使用$LOGNAME而不是$USER.

虽然我同意黑客,但不知道有什么不对getpwuid.


Cha*_*ens 8

这看起来更漂亮吗?

use English qw( ?no_match_vars );

my $username = getpwuid $UID;
Run Code Online (Sandbox Code Playgroud)

  • 嘿.在我的实际代码中,我(当然)使用英语,我实际上使用$ REAL_USER_ID,但我不想在这里引发任何"英语与短名"的争论:) (2认同)