エイリアスでwhichコマンドを使用できますか? [コピー]

エイリアスでwhichコマンドを使用できますか? [コピー]

例:

私は持っていますalias chrome='google-chrome'。私はwhich chrome同じものを返したいと思いますwhich google-chrome。つまり:

/usr/bin/google-chrome

それは可能ですか?

答え1

本当にこれを行うには、whichそれをシェル関数としてオーバーライドできます。

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
}

シェルがある場合、この機能は機能しますが、bash他のシェルを使用している場合は、機能を少し変更する必要があります。

答え2

この目的で使用しないでください。より良い方法はwhichまったく使用しないことです。エイリアス拡張を表示するwhichために使用されます。与えられたコマンドが表すことができるすべての可能なカテゴリ($ PATHのプログラム、シェル組み込み、関数、エイリアス)を表示するためにtype <alias_name>使用されます。たとえば、type -a <command>参照してください。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>0を返すことを確認してください。

答え3

inはと同じ効果を持つコマンドzshです。リストされている各コマンドが同様の形式で解釈される方法が印刷されます。whichbuiltinwhence -ccsh

which組み込み機能のないシェルから。whichエイリアス、組み込み機能、機能を知らず、PATHその名前のコマンドのみを検索できます。

例は次のとおりですwhich echo。印刷することもできますが、/bin/echoechoは(通常)組み込みコマンドでもあります。これはPATH.soより小さいため、シェルは代わりに組み込み関数を使用します/bin/echo

答え4

どのChromeとどのGoogle Chromeが同じ応答を返すかを望む場合は、Chromeのエイリアス(エイリアスchrome = / usr / bin / google-chrome)を作成します。エイリアスはコマンドの前に評価されるため、Chromeから返されるコマンドの内容が変更されます。

関連情報