1. ホーム
  2. バッシュ

[解決済み】bashで実行するために、実行ファイルやスクリプトの名前の前に./(ドットスラッシュ)が必要なのはなぜですか?

2022-03-27 02:15:55

質問

bashでスクリプトを実行する場合、以下のように記述する必要があります。 ./ を冒頭で使用します。

$ ./manage.py syncdb

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

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

その理由は何でしょうか?と思ったのは . は現在のフォルダの別名であり、したがってこれら2つの呼び出しは等価であるべきです。

また、どうして ./ などのアプリケーションを実行するとき。

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

(これは ./ )

解決方法は?

なぜなら、Unix では通常、カレントディレクトリが $PATH .

コマンドを入力すると、シェルはディレクトリのリストを検索します。 PATH 変数があります。カレントディレクトリはそのリストに含まれていない。

そのリストにカレントディレクトリがないのは、セキュリティのためです。

例えば、あなたがrootで他のユーザーのディレクトリに入り、次のように入力したとします。 sl ではなく ls . もし、カレントディレクトリが PATH を実行しようとします。 sl プログラムは、そのディレクトリにある(他に sl プログラム)。その sl が悪意のあるプログラムである可能性があります。

で動作します。 ./ というのも POSIXでは を含むコマンド名は / での検索を抑制し、直接ファイル名として使用されます。 $PATH . 全く同じ効果を得るためにフルパスを使うこともできましたが ./ の方が短くて書きやすい。

EDIT

その sl の部分は単なる一例です。のディレクトリは PATH が順次検索され、一致した場合にそのプログラムが実行されます。ですから PATH のように見える場合、通常のコマンドを入力するだけで、カレントディレクトリにあるプログラムを実行できるかもしれませんし、そうでないかもしれません。