rm -rf ./folder の代わりに rm -rf "`pwd`/folder を使用してください。

rm -rf ./folder の代わりに rm -rf

なぜコマンドを使用するのですか?

rm -rf "`pwd`/folder"

変える

rm -rf ./folder

どちらかを選択する理由はありますか?

ベストアンサー1

rm -rf "`pwd`/folder"残念ながら使用しないでください。これは極端な場合にのみ発生しますが、これらの極端な場合には間違ったディレクトリが削除されるセキュリティ上の問題になる可能性があります。極端なケースは、現在のディレクトリが改行で終わることです。コマンド置換は末尾の改行を削除するため、現在のディレクトリが/some/where/strange⏎(ここで⏎は改行を表す)場合、このコマンドは代わりに削除されます/some/where/strange

このバリエーションは、このコマンドを使用することに比べてrm -rf "$PWD/folder"欠点がなく、長所は、末尾の改行のpwdコーナーケースによって困難に遭遇しないことです。すべてのBourne / POSIXシェルは、PWDすべてのディレクトリ変更コマンド(など)cdの後に変数を更新し、pushd組み込みコマンドの出力と同じ値を持ちます。pwd(外部pwdコマンドは出力が異なる場合がありますが、1.pwd組み込みコマンドが存在し、すべての共通シェルに1つがある場合は、組み込みコマンドが呼び出され、2.とにかくここで外部コマンドを使用しても利点はありません。)

rm -rf "$PWD/folder"しかし、それに比べて利点はありませんrm -rf ./folder。フィッティング時に最大コマンドライン長をrm -rf "$PWD/folder"潜在的に超える可能性があるという理論的欠点があります。rm -rf ./folderただし、最大コマンドライン長はほぼ常に最大ファイルパス長よりかなり大きいため、単一パスを使用するコマンドはほぼ常に適切です。

"$PWD/$foo"代わりに使用する"$foo"とダッシュで始まらないという利点があります。オプションのようだ。変数の場合のみ、パスがスクリプトに明示的に表示されている場合は問題ありません。"./$foo"同じ保護を提供します。相対パスの場合にのみ"$PWD/$foo"正しいです。だから比較して利点はありません。前述のように、より短い相対形式を使用すると、多くのパスが関連している場合にコマンドラインの長さの制限を維持するのに役立ちます。"./$foo"$foorm -rf "$PWD/$foo"rm -rf "./$foo"

を使用すると、後で使用するために変数に保存するよりも"$PWD/folder"明らかな利点があります"./folder"。その間、スクリプトが別のディレクトリに変更されても、同じファイルを引き続き続けます。rm -rf "./folder"完全に大丈夫ですが、このようなコードには絶対パスが必要です。

output_directory="$PWD/output"
# If interrupted, delete the partial output.
trap 'rm -rf "$output_directory"; exit 1' HUP INT TERM

do_stuff >"$output_directory/file1"
do_more_stuff >"$output_directory/file2"
cd "$output_directory"
further_stuff file1 file2 >file3

$output_directory相対パスの場合、削除コードはコマンドのcd前後に機能できますが、両方には機能しません。

おすすめ記事