私の最後の行は次の.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 組み込みなので、エイリアスを報告できます。