Comment puis-je obtenir le nom de l’utilisateur exécutant mon script Perl?

J’ai un script qui doit savoir de quel nom d’utilisateur il est tiré.

Lorsque je le lance depuis le shell, je peux facilement utiliser $ ENV {“USER”}, fourni par bash.

Mais apparemment – alors le même script est lancé depuis cron, également via bash – $ ENV {“USER”} n’est pas défini.

Bien sûr, je peux:

my $username = getpwuid( $< ); 

Mais ça n’a pas l’air sympa – y a-t-il une meilleure / meilleure façon? Il n’est pas nécessaire qu’il soit indépendant du système, car le script est destiné à mon usage personnel et ne sera exécuté que sous Linux.

crontab définit $LOGNAME pour que vous puissiez utiliser $ENV{"LOGNAME"} . $LOGNAME est également défini dans mon environnement par défaut (mais n’a pas regardé où il est défini), vous pouvez donc utiliser uniquement $LOGNAME au lieu de $USER .

Bien que je sois d’accord avec les hackers, je ne sais pas ce qui ne va pas avec getpwuid .

Essayez d’obtenir votre réponse à plusieurs endroits, le premier gagne:

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

Est-ce que ça a l’air plus joli?

 use English qw( −no_match_vars ); my $username = getpwuid $UID; 

Désolé, pourquoi est-ce que ça n’a pas l’air “sympa”? C’est l’appel système approprié à utiliser. Si vous voulez qu’un programme externe soit appelé (par exemple, quelque chose que vous pourriez utiliser à partir d’un script bash), il y a les outils / usr / bin / id et / usr / bin / whoami à utiliser.