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.