例子:
我有alias chrome='google-chrome'
。我想which chrome
返回同样的东西which google-chrome
,即:
/usr/bin/google-chrome
那可能吗?
答案1
如果您确实想which
这样做,可以将其重新定义为 shell 函数:
which() {
if [ -n "$(type "$1" | grep "is aliased")" ]; then
command which $(type "$1" | awk '
{cmd=gensub("[\140\047]", "", "g" , $NF);print cmd}')
else
command which "$1"
fi
}
请注意,虽然如果您的 shell 是bash
,这应该可以工作,但如果您使用不同的 shell,则可能需要稍微修改该函数。
答案2
不要用于此目的,或者更好 -根本which
不要使用。which
用于type <alias_name>
查看别名扩展。用于type -a <command>
查看给定命令可以代表的所有可能类别 - $PATH 中的程序、shell 内置命令、函数、别名。参见type -a echo
例如。
编辑:
您还可以使用alias <ALIAS_NAME>
表单查看别名扩展,例如:
$ alias chrome
alias chrome='google-chrome'
alias <ALIAS_NAME>='
在解析输出后仅获取一部分,如下所示:
$ alias chrome | sed "s,alias !#:1=',," | sed "s,'$,,"
在脚本中执行此操作之前,请确保alias <ALIAS_NAME>
返回零。
答案3
inzsh
是which
一个builtin
与 具有相同效果的命令whence -c
。它将打印出如何以类似格式解释每个列出的命令csh
。
在没有which
内置功能的外壳中。which
不知道别名、内置函数、函数,只能搜索PATH
具有该名称的命令。
一个例子是which echo
。它可能会打印出来,/bin/echo
但 echo (通常)也是一个内置命令,它比PATH
.因此 shell 将使用内置函数而不是/bin/echo
.
答案4
如果您希望哪个 chrome 和哪个 google-chrome 返回相同的响应,请为 chrome 创建一个别名(alias chrome=/usr/bin/google-chrome),它就会。别名是在命令之前评估的,因此这将更改 chrome 返回的命令的内容。