2012-04-22 64 views
5

$0擴展爲shell腳本的名稱。如何獲取調用bash腳本的別名名稱

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

如果shell腳本是通過符號鏈接調用,$0擴展到它的名字:

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

我怎麼能得到一個別名,叫什麼名字?這裏`$ 0'再次擴展到文件名:

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

回答

2

我想你已經知道這一點,但記錄的答案是:你需要通過代碼實現別名的合作。

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

,或者,如果你真的想使用替代別名語法:

alias alternate_name="MY_ALIAS_WAS=alternate_name real_name" 

...然後...

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

但這不再是別名。 – 2012-04-22 19:29:50

+0

嘿,沒錯。好的,更新,使用真正的'別名':-) – DigitalRoss 2012-04-22 19:36:02

+0

非常感謝!你是對的:我一直以來都在使用別名。只是沒有想過,直到你提醒我! :-) – xebeche 2012-04-23 14:59:12

2

bash不會使這個可用。這就是爲什麼符號鏈接用於調用多路複用命令而不是別名的原因。

6

別名是非常愚蠢的,根據the man page

...當讀取命令別名展開,而不是在執行時...

這樣以來bash的基本上是用另一個字符串替換字符串然後執行,命令無法知道別名中展開的內容。

+0

+1了快速,技術上是正確的答案包括鏈接和報價。謝謝一堆! – xebeche 2012-04-23 15:01:48

+0

我在[內部變量下的高級Bash腳本指南](http://www.tldp.org/LDP/abs/html/internalvariables.html)中查找了這個內容,也沒有任何參考。感謝這個答案。 – Patrick 2015-03-05 05:04:35