我有一个脚本,需要知道它运行的用户名。
当我从shell中运行时,我可以轻松使用$ENV{"USER"},这是由bash提供的。
但显然 - 当相同的脚本通过cron运行时,也是通过bash - $ENV{"USER"}未定义。
当然,我可以:
my $username = getpwuid( $< );
但是它看起来不太好看 - 有更好/更漂亮的方法吗?它并不需要是系统独立的,因为这个脚本是我自己使用的,而且只会在Linux上运行。
尝试从多个地方获取答案,第一个获得的为胜者:
my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<);
crontab设置$LOGNAME
,所以您可以使用$ENV{"LOGNAME"}
。默认情况下也会在我的环境中设置$LOGNAME
(尚未查看其设置位置),因此您可能只需使用$LOGNAME
而不是$USER
。
尽管我同意hacker的看法,但不知道getpwuid
有什么问题。
这看起来更漂亮吗?
use English qw( −no_match_vars );
my $username = getpwuid $UID;
抱歉,为什么那样的代码“看起来不好”?那是使用的适当系统调用。如果您想要调用外部程序(例如,您可以从bash脚本中使用的东西),则可以使用工具/usr/bin/id和/usr/bin/whoami。
my $username = getlogin() || (getpwuid($<))[0] || $ENV{LOGNAME} || $ENV{USER};
$<
,所以这不是我关心的争论,但我认为你可能会觉得它更漂亮。 - Chas. Owens