ほとんどのユーザーと同様に、頻繁に使用するプログラムにデフォルトのフラグセットを提供するために、一連のエイリアスを設定しています。たとえば、
alias vim='vim -X'
alias grep='grep -E'
alias ls='ls -G'
問題は、whichを使用したい場合です。 vimの場所を確認する / grep / ls / etcが由来し、エイリアスが邪魔になります:
$ which vim
vim: aliased to vim -X
これは便利な出力ですが、この場合は私が探しているものではありません。 vimを知っています vim -Xにエイリアスされます でもどこにあるのか知りたい vim から来ています。
whichを使用できるように、エイリアスの定義を一時的に解除することはできません。 その上に、whichを作成する簡単な方法はありますか エイリアスを「アンラップ」して、その上で実行しますか?
編集: whichのようです は、さまざまなシェル間でさまざまな動作をするシェルビルトインです。 Bashでは、SiegeXによる--skip-aliasの提案 フラグが機能します。ただし、私はZshを使用しています。そこに似たようなものがありますか?
承認された回答:
which $SHELLに基づいて環境を推測するため、実際にはこのようなことを行うには悪い方法です。 シェルが使用するスタートアップファイル(と思われる)。推測が間違っていることがあるだけでなく、通常、動作が異なるように指示することはできません。 (which 私のUbuntu10.10では--skip-aliasを理解していません たとえば、@ SiegeXで言及されているように。)type 設定ファイルを突く代わりに現在のシェル環境を使用し、その環境の一部を無視するように指示できるため、デフォルトのシェルの再構築で発生するのではなく、実際に何が発生するかが示されます。
この場合、type -P エイリアスまたは関数をバイパスします:
$ type -P vim
/usr/bin/vim
すべてをはがすように依頼することもできます レイヤーを一度に1つずつ表示し、何が見つかるかを示します。
$ type -a vim
vim is aliased to `vim -X'
vim is /usr/bin/vim
(コメントからこれを拡張します:)
whichの問題 これは通常、シェルに組み込まれているのではなく外部プログラムであるということです。つまり、エイリアスや関数を認識できず、シェルのスタートアップ/構成ファイルからそれらを再構築する必要があります。 (zshのように、シェルが組み込まれている場合 しかし、明らかにbashではありません 、シェルの環境を使用して正しいことを行う可能性が高くなります。)
type はPOSIX準拠のコマンドであり、組み込みのように動作する必要があります(つまり、ローカルエイリアスと関数を含めて呼び出されたシェルの環境を使用する必要があります)。したがって、通常は ビルトイン。
通常、cshにはありません / tcsh 、ただし、これらのwhichの最新バージョンでは シェルビルトインであり、正しいことを行います。組み込みの場合はwhat 代わりに、cshから現在のシェルの環境を確認する良い方法がない場合があります / tcsh まったく。