例:
私は持っています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
です。リストされている各コマンドが同様の形式で解釈される方法が印刷されます。which
builtin
whence -c
csh
which
組み込み機能のないシェルから。which
エイリアス、組み込み機能、機能を知らず、PATH
その名前のコマンドのみを検索できます。
例は次のとおりですwhich echo
。印刷することもできますが、/bin/echo
echoは(通常)組み込みコマンドでもあります。これはPATH
.soより小さいため、シェルは代わりに組み込み関数を使用します/bin/echo
。
答え4
どのChromeとどのGoogle Chromeが同じ応答を返すかを望む場合は、Chromeのエイリアス(エイリアスchrome = / usr / bin / google-chrome)を作成します。エイリアスはコマンドの前に評価されるため、Chromeから返されるコマンドの内容が変更されます。