/
POSIX PATHルールの根拠
このルールについては、bashで実行するために実行可能ファイルまたはスクリプト名の前に./(ドットスラッシュ)が必要なのはなぜですか。でもそれがいいデザインだと思う理由をもう少し詳しく説明したいと思います。
まず、ルールの明示的な完全バージョンは次のとおりです。
- パスが含まれている場合
/
(例えば./someprog
、/bin/someprog
、./bin/someprog
):CWDが使用され、PATHではありません
- パスに含まれない場合
/
(例someprog
:):PATHが使用され、CWDは使用されません
ここで、次のように実行するとします。
someprog
検索します:
次に、/bin/someprog
ディストリビューションから実行したい場合は、次のようにします。
someprog
他の無関係なsomeprog
プログラムが含まれているディレクトリにいる可能性があるため、動作することもありますが、失敗することもあります。
したがって、これは信頼できないことをすぐに理解し、PATHを使用したい場合は常に絶対パスを使用することになり、PATHの目的が無効になります。
これはまた、PATHに相対パスを含めることが非常に悪い考えである理由でもあります。私はあなたを見ていますnode_modules/bin
。
逆に、以下を実行するとします。
./someprog
検索します:
次に、someprog
gitリポジトリからスクリプトをダウンロードしてCWDから実行したい場合は、これが実際に実行されるプログラムであるかどうか確信が持てません。
/bin/someprog
これは、昨年のクリスマスの後に飲み過ぎてインストールしたパッケージのPATHに含まれています。
したがって、繰り返しますが、実行しているものを知るために、フルパスを使用してCWDに相対的なローカルスクリプトを常に実行する必要があります。
"$(pwd)/someprog"
これも非常に迷惑です。
思いつきそうなもう1つのルールは次のとおりです。
相対パスはPATHのみを使用し、絶対パスはCWDのみを使用します
ただし、これにより、ユーザーはで非PATHスクリプトに常に絶対パスを使用する必要があります"$(pwd)/someprog"
。
/
パスサーチルールを約問題の解決策を覚えて簡単なを提供しています:
- スラッシュ:使用しない
PATH
- スラッシュなし:使用のみ
PATH
これは、現在のディレクトリ内のファイルは、のいずれかで表現することができるという事実に依存することによって、それが超簡単常にあなたが実行されているものを知ることができる./somefile
かsomefile
、そしてそれが彼らのいずれかに特別な意味を与えるようにします。
ときどき、とsome/prog
比較して検索できないのが少し面倒ですがPATH
、これに対するより正解はありません。