エイリアスによるPATHの実行

エイリアスによるPATHの実行

シェルがPATHと$ PATHを処理する方法を理解していません。以下を考慮してください。alias testCMD=PATH=$PATH

私は走ることができます

$ testCMD vim

しかし、宣言すると動作しません。alias testCMD=$PATH

私も走ることはできません:

$ PATH vim 

または

$ $PATH vim 

これは、他のエイリアスがどのように機能するかと比較してわずかに反直観的です。私の混乱を理解してください。

答え1

シェルには、次のようなさまざまな項目が保存されます。環境変数。 PATHは、これらの環境変数の1つの例にすぎません。

PATH変数が設定されていない場合は、実行される各プログラムのフルパスを手動で設定する必要があります。たとえば、ただ実行することはできず、毎回実行する必要がありますdate/usr/bin/date後で Date のカスタムバージョンをインストールする場合/usr/local/bin/に実行する必要があります/usr/local/bin/date

不便ではありませんが、不可能ではないため、実際にPATHはオプションであることがわかります。したがって、PATHの役割は、単にプログラムの位置を自動的に検出することです。

プログラムはシステム内のさまざまな場所にある可能性があるため、PATHは単純なディレクトリ以上です。代わりに、コロンで区切られたディレクトリのリストです。シェルでコマンドを実行すると、シェルは実行するコマンドを検索するためにこれらのディレクトリを検索します。

例に戻り、でカスタムツールの優先順位を設定するかどうかを設定し、そうでないdate場合は置き換えることができます。その後、実行するとシェルがPATHリストの前半に表示されるため、そのシェルを削除してもPATHで2番目になるため、そのシェルを見つけることができます。PATH=/usr/local/bin:/usr/bin/usr/local/bin/usr/bin/usr/local/bindate/usr/local/bin//usr/local/bin/date/usr/local/bin/date/usr/bin/date/usr/bin/

これを実行すると、alias testCMD=PATH=$PATH次のエイリアスが得られます。

testCMD='PATH=.:/usr/local/bin:/usr/bin:/bin'

したがって、実行時にtestCMD vimシェルが見るのは次のようになります。

PATH=.:/usr/local/bin:/usr/bin:/bin vim

これは、シェルにどこを見なければならないかを知らせるワンタイムガイドラインを提供するだけですvim。実行したばかりの場合、vimtestCMDエイリアスはPATH値を変更しないため、同じ結果が得られます。

PATHを変更すると、次の違いがあります。

$ PATH=/foo vim
bash: vim: command not found

シェルは名前付きのいくつかのディレクトリを見つけようとしますが、/foo確かにそこにはないからです。vim

うまくいかない例に移動すると、変数の割り当てが行われなかったためです。PATH=/foo vimとの間には違いがありますPATH vim。シェルはPATH vim、ユーザーがというプログラムを見つけようとしていると思いますPATH。その後、シェルは各ディレクトリで$PATH名前付きプログラムを探しますPATH。 (おそらく)これらのディレクトリにPATHコマンドがないため、次のような結果が得られます。

$ PATH vim
bash: PATH: command not found

vim値をプレフィックスとして使用しても同じ原則が適用されます$PATH。割り当てがないので、シェルは$PATHこれをいくつかのプログラムの名前だと思います。これがまさにあなたが得る理由です:

$ $PATH vim
bash: .:/usr/local/bin:/usr/bin:/bin: No such file or directory

一般的に、または~/.bashrcさまざまな~/.bash_profileツールチェーンを切り替えたい場合は例外です。これは実際にPython virtualenvsの目的であり、PATHを自動的に再設定します。環境モジュールシステム、例:左型必要に応じてPATHを操作するもう1つの強力な方法です。

関連情報