ほとんどのユーザーと同様に、頻繁に使用するプログラムにデフォルトのフラグセットを提供するために、一連のエイリアスを設定しています。たとえば、
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
まったく。