./
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
、通常のコマンドを入力するだけでは現在のディレクトリでプログラムを実行できない場合があります。