如何在bash中获取递归别名



我有多个aliases,由于处理一些打字错误,它们被别名为一个通用别名。请注意,我在zsh外壳中使用which,在bash中使用type

例如:

alias netlab="ssh user@IP_ADDRESS"
alias n=netlab
alias ne=netlab
alias net=netlab
alias nn=netlab

当我试图获得别名的类型时,我得到以下信息:

$ which -sa n  # in ZSH-shell
n: aliased to netlab
$ type n  # in BASH-shell
n is an alias for netlab

由于netlab也有别名,我也能得到吗?所以基本上,我想递归地应用which program

我想要的示例输出:

$ type n  # in BASH-shell 
n: aliased to netlab
netlab: aliased to ssh user@IP_ADDRESS

或者只是返回其最新别名:

$ type n
n: aliased to ssh user@IP_ADDRESS

您可以使用大括号展开将多个名称别名为同一字符串:

alias {netlab,n,ne,net,nn}="ssh user@IP_ADDRESS"

别名集不会传递到bash脚本中。您可以使用source访问别名,然后使用type循环,直到找到真正的命令。我无法想象使用source运行脚本会很方便。

但是,您可以使用bash脚本和符号链接来实现与别名相同的结果。

以下假设$HOME/bin在您的PATH中。

cat<HOME/bin/netlabsshuser@IP_ADDRESSEOF-

ln-s$HOME/bin/netlab$HOME/binln-s$HOME/bin/netlab$HOME/bin/neln-s$HOME/bin/netlab$HOME/biin/netln-s$HOME/bin/netlab$HOME/biin/nn

现在使用任何新的";别名";将调用原始脚本。

最新更新