Which

我可以在別名上使用哪個命令嗎?

  • January 25, 2015

例子:

我有alias chrome='google-chrome'。我想which chrome返回相同的東西which google-chrome返回,即:

/usr/bin/google-chrome

那可能嗎?

如果您真的想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,則可能需要稍微修改該函式。

不要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>返回零。

引用自:https://unix.stackexchange.com/questions/181005