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

时间:2009-09-04 09:42:31

标签: linux perl

我有一个脚本需要知道它的用户名。

当我从shell运行它时,我可以轻松使用由bash提供的$ ENV {“USER”}。

但显然 - 然后同样的脚本从cron运行,也通过bash运行 - $ ENV {“USER”}未定义。

当然,我可以:

my $username = getpwuid( $< );

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

4 个答案:

答案 0 :(得分:49)

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

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

答案 1 :(得分:9)

crontab设置$LOGNAME,以便您可以使用$ENV{"LOGNAME"}。默认情况下,我的环境中也会设置$LOGNAME(但未查看设置的位置),因此您可能只能使用$LOGNAME代替$USER

虽然我同意黑客,但不知道getpwuid有什么问题。

答案 2 :(得分:8)

这看起来更漂亮吗?

use English qw( −no_match_vars );

my $username = getpwuid $UID;

答案 3 :(得分:2)

对不起,为什么不“看起来不错”?这是适当的系统调用。如果你想要一个外部程序来调用(例如你可以从bash脚本中使用的东西),还有工具/ usr / bin / id和/ usr / bin / whoami可供使用。