使用 rm -rf "`pwd`/folder 而不是 rm -rf ./folder

使用 rm -rf "`pwd`/folder 而不是 rm -rf ./folder

为什么我要使用命令

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 shellPWD在每个目录更改命令(cd、等)之后都会更新变量,并且它具有与内置命令输出pushd相同的值。 pwd(外部pwd命令可能有不同的输出,但是 1.pwd如果存在内置命令并且所有常见 shell 都有一个,则调用内置命令,并且 2. 无论如何,在这里使用外部命令没有任何优势。)

rm -rf "$PWD/folder"然而,与 相比并没有优势rm -rf ./folder。它具有理论上的缺点,rm -rf "$PWD/folder"可能会超过rm -rf ./folder拟合时的最大命令行长度。然而,最大命令行长度几乎总是明显大于最大文件路径长度,因此具有单个路径的命令几乎总是适合。

使用"$PWD/$foo"instead of的"$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命令之前或之后工作,但不能同时工作。

相关内容