Linux 如何在bash中获取递归别名?

Linux 如何在bash中获取递归别名?,linux,bash,shell,zsh,alias,Linux,Bash,Shell,Zsh,Alias,我有多个别名,由于处理一些打字错误,这些别名被化名为一个普通别名。请注意,我在zshshell中使用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

我有多个
别名
,由于处理一些打字错误,这些别名被化名为一个普通别名。请注意,我在
zsh
shell中使用
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
也有一个别名,我也能得到它吗?基本上,我想递归地应用哪个程序

我想要的示例输出:

$ 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"

可以使用大括号扩展将多个名称别名到同一字符串中:

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

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

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

以下假设$HOME/bin位于您的路径上

cat<$HOME/bin/netlab sshuser@IP_ADDRESS EOF

ln-s$HOME/bin/netlab$HOME/bin/n ln-s$HOME/bin/netlab$HOME/bin/ne ln-s$HOME/bin/netlab$HOME/bin/net ln-s$HOME/bin/netlab$HOME/bin/nn


现在,使用任何新的“别名”都将调用原始脚本。

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

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

以下假设$HOME/bin位于您的路径上

cat<$HOME/bin/netlab sshuser@IP_ADDRESS EOF

ln-s$HOME/bin/netlab$HOME/bin/n ln-s$HOME/bin/netlab$HOME/bin/ne ln-s$HOME/bin/netlab$HOME/bin/net ln-s$HOME/bin/netlab$HOME/bin/nn


现在,使用任何新的“别名”都将调用原始脚本。

您使用的是哪个bash版本(您可以使用
echo$bash\u version
检查它)?在mine(4.4)中,
,它仍然是一个extern命令,因此不能显示当前定义的别名。我不知道这个特性是否被合并到了更高版本的bash.loop-over-alias
x=nn;别名“$x”2>/dev/null;dox=$(别名“$x”)&&x=${x#alias*=\'}&&x=${x%\'};完成
,可以永远循环
别名a=b;别名b=a
@user1934428抱歉,我在
zsh
shell中使用了
which
;对于
bash
我使用的是
type
。我更新了我的问题,我不知道一个内置的方式可以告诉你别名如何递归解析。如果你真的需要这个功能,我建议你写一个函数来实现这个功能。我相信用另一个别名来定义一个别名的情况很少见,也许这就是为什么语言设计者没有在bash或zsh中提供这样的命令的原因。每个单词只能有一个别名。不确定我们到底能不能找到一个别名依赖项。但据我从评论中了解,这可能是一个无休止的循环//但是@另一个家伙的答案是我正在寻找的集合,它有多个单词链接到一个别名。您使用的是哪个bash版本(您可以使用
echo$bash_version
检查它)?在mine(4.4)中,
,它仍然是一个extern命令,因此不能显示当前定义的别名。我不知道这个特性是否被合并到了更高版本的bash.loop-over-alias
x=nn;别名“$x”2>/dev/null;dox=$(别名“$x”)&&x=${x#alias*=\'}&&x=${x%\'};完成
,可以永远循环
别名a=b;别名b=a
@user1934428抱歉,我在
zsh
shell中使用了
which
;对于
bash
我使用的是
type
。我更新了我的问题,我不知道一个内置的方式可以告诉你别名如何递归解析。如果你真的需要这个功能,我建议你写一个函数来实现这个功能。我相信用另一个别名来定义一个别名的情况很少见,也许这就是为什么语言设计者没有在bash或zsh中提供这样的命令的原因。每个单词只能有一个别名。不确定我们到底能不能找到一个别名依赖项。但据我从评论中了解,这可能是一个无休止的循环//但是@另一个人的答案是我要找的集合,它有多个单词链接到一个别名。这里没有l值,只有字符串这里没有l值,只有字符串