$0
扩展为shell脚本的名称。
$ 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
答案 0 :(得分:8)
...在读取命令时扩展别名,而不是在执行命令时...
因为bash基本上只是用另一个字符串替换一个字符串然后执行它,所以命令无法知道在别名中扩展了什么。
答案 1 :(得分:2)
bash不提供此功能。这就是使用符号链接来调用多路复用命令而不是别名的原因。
答案 2 :(得分:2)
我想你已经知道了,但是为了记录,答案是:你需要通过实现别名的代码进行合作。
alternate_name () {
MY_ALIAS_WAS=alternate_name real_name "$@"
}
或者,如果你真的想使用被取代的别名语法:
alias alternate_name="MY_ALIAS_WAS=alternate_name real_name"
......然后......
$ cat ~/bin/real_name
#!/bin/sh
echo $0, I was $MY_ALIAS_WAS, "$@"