回答:
現在のディレクトリにあるファイルの場合、ファイルの前にを付けると./
コマンドがになり./executable.sh
ます。.
他の問題の中でも特に、セキュリティリスクを引き起こすため、PATHに絶対に入れないでください。
PATHで最初に検索され、最初に検索されるディレクトリ。
正しく覚えていれば、検索の全体的な順序は次のようになります。
エイリアス
エクスポートされた関数
組み込みシェルコマンド
PATH内のスクリプトとバイナリ
hash -r
PATHまたはプログラムの場所を変更した場合、キャッシュを(を使用して)パージしなければならない場合があります。
これは他の一部の人からはよく回答されていますが、いくつかの考えを追加したいと思います。
1)PATHは、呼び出された実行可能ファイルにパス要素がない場合にのみ参照されます。somecommandは$ PATH ./somecommand
または/usr/bin/somecommand
で検索されるか、../../bin/somecommand
PATHではなくディレクトリルールを使用します。
同じ名前の複数の実行可能ファイルがPATHにある場合、どれが優先されますか?
最初に見つかったもので停止し、$ PATHを左から右に読み取ります。
ファイルの実行時に現在のディレクトリが検索に含まれていますか?
現在のディレクトリがPATHにある場合、検索されます。PATHの空のディレクトリには現在のディレクトリが含まれることに注意してください。例:PATH =:/ usr / bin(先頭が空)PATH = / usr / bin:(末尾が空)およびPATH = / usr / bin :: / bin(中央が空)はすべて、現在の作業ディレクトリを効果的に含みます。
現在のディレクトリにexecutable.shという名前のファイルがあると仮定します。それが実行された場合、それは機能しますか?PATHの一部ではありませんか?
PATHを検索しても見つけられません。現在のディレクトリがPATHにない場合、PATHルックアップではそれを見つけられません。
ただし、コマンドを実行したエイリアスまたは関数があれば、それが実行されます。または、シェルにロケーションキャッシュがあり、実行可能ファイルがキャッシュにあった場合、それが見つかる可能性があります。だから、それはなります決して PATHにそれを見つけていないが、それは他の手段によって実行することができます。
cache
注のおかげで、古い実行可能ファイル/usr/bin/
がまだの新しい実行ファイルではなくまだ呼び出されていることに夢中になりますが、ログアウトしてから再びログインするまで/usr/local/bin
左側に$PATH
あります。
現在のパスを確認するには、単にecho $PATH
またはを入力しprintenv PATH
ます。
その後、検索の順序がわかります。同じ名前のファイルが複数ある場合は、どの____を実行するだけで確認できます。
例
system#> grep
/ usr / bin / grep
ターゲットのように機能するファイルを見つけるクールな方法は、aproposを使用することです。
apropos grep
bzgrep(1)-おそらくbzip2で圧縮されたファイルで正規表現を検索する
egrep(1)-パターンに一致する行を出力
fgrep(1)-パターンに一致する行を出力
grep(1)-パターンに一致する行を印刷する
等々...
whereis
ではなく、ハードコードされた場所のリストを使用し$PATH
ます。
@ coneslayer-実行可能ファイルを見つけるデフォルトの順序は、現在のパス、組み込みコマンド、そして$ PATHです。したがって、executableという名前の関数がpwdに既に存在する場合、それは実行されます。そうでない場合、優先順位はシェルの組み込みコマンドを検索し、次に$ PATH
./
)を指定すると、そのディレクトリのみが検索されます。それ以外の場合は、検索します$PATH
。
which <executable>
このスレッドでは、コマンドに言及するのが便利です。