エイリアスは PATH エントリを「上書き」しませんか?

エイリアスは PATH エントリを「上書き」しませんか?

私の最後の行は次の.bash_profileとおりです。

alias cp=/usr/local/bin/gcp

しかし、それは私のエントリによって押しつぶされています$PATH:

$which cp
/bin/cp
11:54:32/OCspark $type cp
cp is aliased to `/usr/local/bin/gcp'

エイリアスはPATH.. を上書きすると思っていましたが?

答え1

このwhichコマンドは実行可能ファイルのみを返します。これは外部プログラムであるためエイリアスについては何も認識せず、エイリアス情報を子プロセスに渡すメカニズムもありません。

コマンドを入力すると、type -a cpすべての可能な解釈が優先順位順に表示されます。は内部コマンドtypeなので、これにはエイリアスも含まれますbash

エイリアスは、システム コマンドを実行するオプションを持つスクリプトや対話型エディターなどのサブプロセスによって解釈されないことに注意することが重要です。

関数を作成するとcp、そのバージョンはスクリプト内で実行されますが、他のプログラムからは実行されません。

cp() { /usr/local/bin/gcp "$@"; }

をどこでも動作させたい場合はcp、リスト$HOME/binの先頭に以下を追加してPATH$HOME/bin/cpそれをポイントします。

ln -s /usr/local/bin/gcp $HOME/bin/cp

これによりシンボリック リンクが作成されますが、これをもう少し効率的なハード リンク ( を省略-s) にすることもできますが、通常はルート権限 ( sudo ln ...) が必要になります。関数の作成と変数への追加は、ユーザー権限を使用して、起動スクリプトPATHの 1 つで実行されます。bash

答え2

エイリアスはシェルの内部的なものであり、他のプログラムはそれを認識しません。

whichは Bash の組み込みコマンドではありません (zsh などの他のシェルでは組み込みコマンドです)。Bashwhichのエイリアスに関する特権情報がないため、指定された用語をwhich検索するだけです。PATH

type、 一方でBash 組み込みなので、エイリアスを報告できます。

関連情報