[解決済み】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
(これは
./
)
解決方法は?
なぜなら、Unix では通常、カレントディレクトリが
$PATH
.
コマンドを入力すると、シェルはディレクトリのリストを検索します。
PATH
変数があります。カレントディレクトリはそのリストに含まれていない。
そのリストにカレントディレクトリがないのは、セキュリティのためです。
例えば、あなたがrootで他のユーザーのディレクトリに入り、次のように入力したとします。
sl
ではなく
ls
. もし、カレントディレクトリが
PATH
を実行しようとします。
sl
プログラムは、そのディレクトリにある(他に
sl
プログラム)。その
sl
が悪意のあるプログラムである可能性があります。
で動作します。
./
というのも
POSIXでは
を含むコマンド名は
/
での検索を抑制し、直接ファイル名として使用されます。
$PATH
. 全く同じ効果を得るためにフルパスを使うこともできましたが
./
の方が短くて書きやすい。
EDIT
その
sl
の部分は単なる一例です。のディレクトリは
PATH
が順次検索され、一致した場合にそのプログラムが実行されます。ですから
PATH
のように見える場合、通常のコマンドを入力するだけで、カレントディレクトリにあるプログラムを実行できるかもしれませんし、そうでないかもしれません。
関連
-
[解決済み】「ambiguous redirect」エラーが発生する
-
[解決済み】ZIPエラー - 何もできない
-
[解決済み] osx find exec rm find: exec: 不明な主またはオペレータ
-
[解決済み] Bashスクリプトでスクリプトファイル名を知るには?
-
[解決済み] あいまいなリダイレクト」エラーが発生する
-
[解決済み] "[0: コマンドが見つかりません]" in Bash [重複].
-
[解決済み] Bashスクリプトでカレントディレクトリ名(フルパスなし)を取得する
-
[解決済み] なぜ、スクリプトファイルの先頭に#!/bin/bashを付ける必要があるのですか?
-
[解決済み] bashスクリプトから複数のプログラムを並列に実行するにはどうすればよいですか?
-
[解決済み】「sh」や「bash」コマンドを使わずにシェルスクリプトを実行するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ambiguous redirect」エラーが発生する
-
[解決済み】bashでjsonファイルを解析するために、jqの出力にあるダブルクオートを削除する方法は?
-
[解決済み】firebase-tools "-bash: firebase: command not found".
-
[解決済み] systemd サービス 203/EXEC の失敗 (そのようなファイルやディレクトリがない) を修正する。
-
[解決済み] mkdir コマンドが bash スクリプトで見つかりません。
-
[解決済み] echoコマンドでパイピングが効かない [重複]。
-
[解決済み] Bashで最新のディレクトリを変数に取得する
-
[解決済み] ConcatenationとAppendの違いについて【終了しました
-
[解決済み] Bash - "fi ;;" の使い方は?
-
[解決済み] ターミナルでbashスクリプトを実行するにはどうすればよいですか?