我可以对别名使用 which 命令吗?

我可以对别名使用 which 命令吗?

例子:

我有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

inzshwhich一个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 返回的命令的内容。

相关内容