如何在 bash 中获取递归别名?
How to get recursive aliases in bash?
我有多个 aliases
由于处理了一些拼写错误而被别名为一个通用别名。请注意,我在 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
也有别名,我也可以得到吗?所以基本上,我想递归地应用 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/netlab
ssh 用户@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
现在使用任何新的“别名”都将调用原始脚本。
我有多个 aliases
由于处理了一些拼写错误而被别名为一个通用别名。请注意,我在 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
也有别名,我也可以得到吗?所以基本上,我想递归地应用 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/netlab ssh 用户@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
现在使用任何新的“别名”都将调用原始脚本。