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-aliasx=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-aliasx=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值,只有字符串