2012-04-22 8 views
5

$0 wird auf den Namen des Shell-Skripts erweitert.So erhalten Sie den Namen des Alias, der das Bash-Skript aufgerufen hat

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

Wenn das Shell-Skript über einen symbolischen Link aufgerufen wird, dehnt sich $0 zu seinem Namen:

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

Wie konnte ich den Namen eines Alias ​​bekommen? Hier wird '$ 0' wieder auf den Dateinamen erweitert:

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

Antwort

2

Ich kann mir vorstellen, dass Sie das bereits wissen, aber für die Aufzeichnung ist die Antwort: Sie benötigen Zusammenarbeit durch den Code, der den Alias ​​implementiert.

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

oder, wenn Sie wirklich wollen die ersetzte Alias ​​Syntax:

alias alternate_name="MY_ALIAS_WAS=alternate_name real_name" 

... und dann ...

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

Aber das ist kein Alias ​​mehr. –

+0

Heh, wahr. Ok, aktualisiert, mit dem echten 'Alias' :-) – DigitalRoss

+0

Vielen Dank! Du hast Recht: Ich benutze seit Jahren Aliase. Ich habe einfach nicht darüber nachgedacht, bis du mich daran erinnert hast! :-) – xebeche

2

bash stellt dies nicht zur Verfügung. Aus diesem Grund werden Symlinks verwendet, um Multiplex-Befehle und keine Aliase aufzurufen.

6

Aliases sind ziemlich dumm, nach the man page

... Aliases erweitert werden, wenn ein Befehl gelesen wird, nicht, wenn es ... ausgeführt wird

so da bash ist im Grunde nur Ersetzen eines Strings durch einen anderen String und anschließendes Ausführen, gibt es keine Möglichkeit für den Befehl zu wissen, was im Alias ​​erweitert wurde.

+0

+1 für eine schnelle, technisch einwandfrei Antwort einschließlich Link und Zitat. Vielen Dank! – xebeche

+0

Ich habe nach dem im [Advanced Bash Scripting Guide unter Interne Variablen] (http://www.tldp.org/LDP/abs/html/internalvariables.html) gesucht und es gibt dort auch keinen Hinweis. Danke für diese Antwort. – Patrick

Verwandte Themen