なぜコマンドを使用するのですか?
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"
$foo
rm -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
前後に機能できますが、両方には機能しません。