bash で実行する場合、実行可能ファイルまたはスクリプト名の前に ./ (ドット スラッシュ) が必要なのはなぜですか? 質問する

bash で実行する場合、実行可能ファイルまたはスクリプト名の前に ./ (ドット スラッシュ) が必要なのはなぜですか? 質問する

./bash でスクリプトを実行するときは、最初に次のように記述する必要があります。

$ ./manage.py syncdb

そうしないと、エラー メッセージが表示されます。

$ manage.py syncdb
-bash: manage.py: command not found

その理由は何でしょうか?.現在のフォルダーのエイリアスであると考えていたため、これら 2 つの呼び出しは同等であるはずです。

./また、次のようなアプリケーションを実行するときになぜ必要ないのか理解できません。

user:/home/user$ cd /usr/bin
user:/usr/bin$ git

(なしでも実行できます./

ベストアンサー1

Unix では通常、現在のディレクトリは にありません$PATH

コマンドを入力すると、シェルは変数で指定されたディレクトリのリストを検索しますPATH。現在のディレクトリはそのリストに含まれていません。

現在のディレクトリがそのリストに含まれていない理由はセキュリティのためです。

たとえば、あなたがルートで、別のユーザーのディレクトリに移動し、slの代わりにと入力したとしますls。現在のディレクトリが にある場合PATH、シェルはそのディレクトリ内のプログラムを実行しようとしますsl(他のプログラムがないためsl)。そのslプログラムは悪意のあるものである可能性があります。

./それは、POSIXは規定しているを含むコマンド名は/ファイル名として直接使用され、 内の検索は抑制されます$PATH。 まったく同じ効果を得るためにフルパスを使用することもできますが、./より短く、より簡単に記述できます。

編集

このsl部分は単なる例です。ディレクトリはPATH順番に検索され、一致するとプログラムが実行されます。そのため、見た目によってはPATH、通常のコマンドを入力するだけでは現在のディレクトリでプログラムを実行できない場合があります。

おすすめ記事