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

xeb*_*che 6 bash scripting alias

$0 扩展为shell脚本的名称.

$ cat ./sample-script
#!/bin/bash
echo $0
$ chmod 700 ./sample-script
$ ./sample-script
./sample-script
Run Code Online (Sandbox Code Playgroud)

如果通过符号链接调用shell脚本,请$0展开其名称:

$ ln -s ./sample-script symlinked-script
$ ./symlinked-script
./symlinked-script
Run Code Online (Sandbox Code Playgroud)

我怎么能得到别名的名字?这里`$ 0'再次扩展到文件名:

$ alias aliased-script=./sample-script
$ aliased-script
./sample-script
Run Code Online (Sandbox Code Playgroud)

She*_*hep 8

根据手册页,别名非常愚蠢

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

因为bash基本上只是用另一个字符串替换字符串然后执行它,所以命令无法知道在别名中扩展了什么.


Dig*_*oss 3

我想您已经知道这一点,但根据记录,答案是:您需要通过实现别名的代码进行合作。

alternate_name () {
  MY_ALIAS_WAS=alternate_name real_name "$@"
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您确实想使用取代的别名语法:

alias alternate_name="MY_ALIAS_WAS=alternate_name real_name"
Run Code Online (Sandbox Code Playgroud)

...进而...

$ cat ~/bin/real_name
#!/bin/sh
echo $0, I was $MY_ALIAS_WAS, "$@"
Run Code Online (Sandbox Code Playgroud)