パスに./を使用することは、一般的なUnixツールに適していますか?

パスに./を使用することは、一般的なUnixツールに適していますか?

長年にわたり、私は./その前で絶対パスをますます使用してきました。たとえば、

mv ./file /target/
rm ./something/else

# compared to
mv file /target/
rm something/else

私はウェブのより多くの場所でそれを見て、おそらくこれが私がそれを使用するのに適応した理由です。私はなぜこれが行われたのか理解できないようで、しばらく気になりました。おそらく、これはローカルバイナリを直接呼び出すことから生じる悪い習慣かもしれません。./a.out

./上記のシェルの例の内容は古いですか?./使用する理由はありますか?一部ケース?これを使用すると、パスがより明確になりますか?

答え1

.特に、コンテンツがスクリプトまたはプログラムの場合、現在のディレクトリに何かがあることを明示的$PATHに指定するのは悪い習慣ではありません。セキュリティリスクとみなされる)。

場合によっては、./必要に関係なくパス名の先頭に追加します。たとえば、下にfind検索したときに見つかったパス名には.常に接頭辞が付けられます./

他の場合は、ファイル名がユーティリティオプションを妨げる可能性があります(たとえば、次を-f使用して削除しようとするときなど)。

rm -f

使用

rm ./-f

次のように問題を解決できます(./-fオプションとは見なされませんrm)。

rm -- -f

do(--コマンドラインオプションの終わりを示します)。

さらに、シェルグローバル変数は、*ダッシュで始まるファイルに拡張できます。したがって、ループは./*ループよりも安全です(ユーティリティに提供されているオプションで区切られた未知のファイル名を*使用しない限り)。--

./したがって、特にパス名が変数に保存され、スクリプトの外部ソースから来る場合は、パス名を使用することをお勧めします。

関連情報