2009-09-04 10 views
25

Tengo un script que necesita saber de qué nombre de usuario se ejecuta.¿Cómo puedo obtener el nombre del usuario que ejecuta mi script de Perl?

Cuando lo ejecuto desde shell, puedo usar fácilmente $ ENV {"USER"}, que es proporcionado por bash.

Pero aparentemente - entonces la misma secuencia de comandos se ejecuta desde cron, también a través de bash - $ ENV {"USER"} no está definido.

Por supuesto, puedo:

my $username = getpwuid($<); 

Pero no se ve muy bien - ¿hay alguna manera mejor/más agradable? No tiene que ser independiente del sistema, ya que el script es para mi uso personal, y solo se ejecutará en Linux.

Respuesta

9

crontab establece $LOGNAME para que pueda usar $ENV{"LOGNAME"}. $LOGNAME también está configurado en mi entorno de forma predeterminada (aunque no he visto dónde se establece), por lo que podría utilizar solo $LOGNAME en lugar de $USER.

Aunque estoy de acuerdo con hacker, no sé qué pasa con getpwuid.

2

Disculpa, ¿por qué no se ve "bien"? Esa es la llamada de sistema apropiada para usar. Si quieres invocar un programa externo (por ejemplo, algo que también puedas usar de un script bash), existen las herramientas/usr/bin/id y/usr/bin/whoami para usar.

8

¿Esto se ve más bonito?

use English qw(−no_match_vars); 

my $username = getpwuid $UID; 
+2

Je. En mi código actual, yo (por supuesto) uso el inglés, y realmente uso $ REAL_USER_ID, pero no quería desatar ningún debate "inglés vs. nombres cortos" aquí :) –

+0

En mi código usaría ' $ <', así que no es un debate que me importe, pero pensé que podría considerarlo más bonito. –

45

intentar conseguir su respuesta de varios lugares, primero gana:

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