如何获取调用bash脚本的别名

时间:2012-04-22 19:17:07

标签: bash scripting alias

$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

3 个答案:

答案 0 :(得分:8)

根据{{​​3}}

,别名非常愚蠢
  

...在读取命令时扩展别名,而不是在执行命令时...

因为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, "$@"