Подтвердить что ты не робот

Как я могу получить имя пользователя, выполняющего мой Perl script?

У меня есть script, который должен знать, с какого имени пользователя он запускается.

Когда я запускаю его из оболочки, я могу легко использовать $ENV { "USER" }, который предоставляется bash.

Но, по-видимому, тогда тот же script запускается из cron, также через bash - $ENV { "USER" } не определен.

Конечно, я могу:

my $username = getpwuid( $< );

Но это не выглядит красиво - есть ли лучше/лучше? Он не должен быть системно-независимым, так как script предназначен для моего личного использования и будет работать только в Linux.

4b9b3361

Ответ 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 для использования.