2011-01-05 17 views
38

¿Cómo puedo obtener el nombre de la secuencia de comandos?Cómo obtener el nombre de la secuencia de comandos Perl que se ejecuta

Por ejemplo, tengo un script Perl con el nombre XXX.pl. Este archivo contiene:

$name = #some function that obtains the script's own name 
print $name; 

Salida:

XXX.pl 

me gustaría comparar esto con la función de la caquexia crónica que obtiene el directorio de secuencias de comandos. Necesito una función que también obtenga el nombre del guión.

Respuesta

64

El nombre del programa que se ejecuta se pueden encontrar en la variable $0:

print $0; 

man perlvar para otras variables especiales.

+0

A veces, el programa en ejecución no será el archivo pl, sino un trabajo por lotes que cargó y ejecutó el archivo pl. Si sus nombres de archivo son similares a los nombres de sus paquetes, imprima "(". Caller. ")"; es más útil. – HoldOffHunger

40
use File::Basename; 
my $name = basename($0); 

PS. getcwd()and friends ¡no le proporcionamos el directorio del script! Te dan el directorio de trabajo. Si el script está en su RUTA y solo lo llama por su nombre, no por su ruta completa, entonces getcwd() no hará lo que usted dice. Desea dirname($0) (dirname también está en File::Basename).

+1

Esto es incorrecto; 'dirname ($ 0)' también da la ruta relativa. Si ejecuta un script con 'perl script' o'./Script', devolverá '.'. – felwithe

7

Probablemente también le interese aprender más sobre __FILE__, y posiblemente __LINE__, que le da la línea actual y la uso con frecuencia.

Si desea esto para la depuración, es posible que desee obtener más información acerca de "warn", "Carp", "caller".

2

Eche un vistazo al módulo FindBin, parte de la distribución central de Perl. Exporta las variables que está buscando

EXPORTABLE VARIABLES 
     $Bin   - path to bin directory from where script was invoked 
     $Script  - basename of script from which Perl was invoked 
     $RealBin  - $Bin with all links resolved 
     $RealScript - $Script with all links resolved 
+0

Consulte también http://stackoverflow.com/a/90721/834416 para obtener una respuesta más matizada. –

Cuestiones relacionadas