ディレクトリにアクセスするために現在のディレクトリを表すためにドットを使用する必要がありますか、それともファイルにのみ使用する必要がありますか?
たとえば、現在のディレクトリにディレクトリとファイルがfoo
含まれている場合は、いつポイント文字を省略できますか?bar
baz.txt
./bar
./baz.txt
答え1
ファイルパスが必要な場合は、./foo
書き込みを使用できるfoo
場所はわずか数箇所です。./foo
./foo
書き込みは、予想されるパスが必ずしもパスではなく、検索パスにあるファイル名である場合に便利です。最も一般的な状況は、実行可能なコマンドを呼び出すときです。リストされたディレクトリで実行可能なプログラムを検索するPATH
変えるただし、この照会は、指定されたコマンド名にスラッシュが含まれていない場合にのみ実行されます。したがって、PATH(通常)のコマンドをls
呼び出すと、現在のディレクトリで実行可能なプログラムが呼び出されます。より一般的には、書き込みは名前のシェルエイリアス、関数、または組み込み機能も無視します。ls
/bin/ls
./ls
ls
./foo
foo
プレフィックスのもう1つの用途./
は、特定の特殊文字で始まるファイル名に関する問題を回避することです。特に、ファイル名をコマンドに引数として渡す場合、ほとんどの場合、コマンド-
はで始まる場合、誤って解釈された-
オプション。ただし、これは相対パス(つまり、次に始まらない)の場合にのみ機能します。ファイル名を保護するもう1つのより一般的な方法は、ファイル名をコマンドラインに配置することです。 (通常、次のものがオプションではなく引数であることを示します。)(ただし、これが特定の場合に常に機能するわけではありません。そうであれば、多くのコマンドは次のことを意味します。「標準入力」)。このトピックについては、以下を参照してください。"./$filename"
"$filename"
-
$filename
/
--
mycommand -- "$filename"
--
$filename
-
スペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?そしてbash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスク
答え2
まあ、必要に応じてフォルダ内のドット文字を省略できますが、どちらも機能します。
cd ./bar
または
cd bar
同じですが、2番目のものがより便利であることに同意します。
ファイルを実行するにはbar.txt
(つまり、ファイルを実行できますchmod 755
)、./ディレクティブを使用する必要があります。
./bar.txt
スクリプトを実行します
bar.txt
何もしないでください
cat bar.txt
それともcat ./bar.txt
同じことをします。
役に立ったことを願っています:)
編集:スクリプトの実行に./が必要な理由について詳しく知りたい場合は、次の手順に従います。https://stackoverflow.com/questions/6331075/why-do-you-need-dot-slash-before-script-name-to-run-it-in-bash
Unixでは、通常、現在のディレクトリが$ PATHにないためです。コマンドを入力すると、シェルはPATH変数で指定された>のようなディレクトリのリストを探します。現在、ディレクトリはこのリストにありません。
(@cnicutar)