我有一个脚本需要知道它的用户名。
当我从shell运行它时,我可以轻松使用由bash提供的$ ENV {“USER”}。
但显然 - 然后同样的脚本从cron运行,也通过bash运行 - $ ENV {“USER”}未定义。
当然,我可以:
my $username = getpwuid( $< );
但它看起来并不好 - 有没有更好/更好的方式?它不必独立于系统,因为该脚本仅供我个人使用,并且只能在Linux上运行。
答案 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可供使用。