Как я могу получить имя пользователя, выполняющего мой Perl script?
У меня есть script, который должен знать, с какого имени пользователя он запускается.
Когда я запускаю его из оболочки, я могу легко использовать $ENV { "USER" }, который предоставляется bash.
Но, по-видимому, тогда тот же script запускается из cron, также через bash - $ENV { "USER" } не определен.
Конечно, я могу:
my $username = getpwuid( $< );
Но это не выглядит красиво - есть ли лучше/лучше? Он не должен быть системно-независимым, так как script предназначен для моего личного использования и будет работать только в Linux.
Ответы
Ответ 1
crontab устанавливает $LOGNAME
, чтобы вы могли использовать $ENV{"LOGNAME"}
. $LOGNAME
также установлен в моей среде по умолчанию (не смотрел, где он установлен), поэтому вы можете использовать только $LOGNAME
вместо $USER
.
Хотя я согласен с хакером, не знаю, что случилось с getpwuid
.
Ответ 2
Попробуйте получить ответ из нескольких мест, сначала победите:
my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<);
Ответ 3
Это выглядит красивее?
use English qw( −no_match_vars );
my $username = getpwuid $UID;
Ответ 4
Извините, почему это не так "хорошо выглядит"? Это означает, что соответствующий системный вызов используется. Если вы хотите, чтобы внешняя программа вызывала (например, что-то, что вы могли бы использовать из bash script), есть инструменты /usr/bin/id и/usr/bin/whoami для использования.