2012-04-22 8 views
5

$0 se expande al nombre del script de shell.Cómo obtener el nombre del alias que invocó el script bash

$ cat ./sample-script 
#!/bin/bash 
echo $0 
$ chmod 700 ./sample-script 
$ ./sample-script 
./sample-script 

Si el script se invoca a través de un enlace simbólico, $0 expande a su nombre:

$ ln -s ./sample-script symlinked-script 
$ ./symlinked-script 
./symlinked-script 

cómo podría conseguir el nombre de un alias? Aquí `$ 0 'se expande nuevamente al nombre de archivo:

$ alias aliased-script=./sample-script 
$ aliased-script 
./sample-script 

Respuesta

2

Imagino que ya sabe esto, pero para que conste en acta, la respuesta es: necesita la cooperación del código que implementa el alias.

alternate_name() { 
    MY_ALIAS_WAS=alternate_name real_name "[email protected]" 
} 

o, si realmente desea utilizar la sintaxis sustituida alias:

alias alternate_name="MY_ALIAS_WAS=alternate_name real_name" 

... y luego ...

$ cat ~/bin/real_name 
#!/bin/sh 
echo $0, I was $MY_ALIAS_WAS, "[email protected]" 
+0

Pero eso ya no es un alias. –

+0

Heh, cierto. Ok, actualizado, usando el 'alias' real :-) – DigitalRoss

+0

¡Muchas gracias! Tienes razón: he estado usando alias de esa manera desde hace mucho tiempo. ¡Simplemente no lo pensé, hasta que me lo recordó! :-) – xebeche

2

bash no lo pone a disposición. Esta es la razón por la cual los enlaces simbólicos se usan para invocar comandos múltiplex, y no alias.

6

alias son bastante tonto, de acuerdo con the man page

... Los alias se expanden cuando se lee un comando, no cuando se ejecuta ...

por lo que desde Bash es, básicamente, sólo reemplazando una cadena con otra cadena y luego ejecutándola, no hay forma de que el comando sepa qué se expandió en el alias.

+0

+1 para un rápido, técnicamente correcto respuesta incluyendo enlace y cita. ¡Gracias un montón! – xebeche

+0

Lo busqué en la [Guía avanzada de scripts de Bash en Variables internas] (http://www.tldp.org/LDP/abs/html/internalvariables.html) y tampoco hay referencias allí. Gracias por esta respuesta. – Patrick

Cuestiones relacionadas