关于 rm 和--
假设我创建了两个文件-i
和xx
。如果我尝试使用
$ rm *
我得到:
rm: remove regular file `xx'? n
并且,正如如何在 Linux 中删除名称看起来只有一个连字符(如“-”)的文件和其他人一样,解决这个问题的方法是:
$ rm -- *
-rf
显然,如果名称为或类似名称,问题可能会更加严重。
我的问题是:
我们是否应该在任何可扩展的东西之前系统地使用命令,以避免不愉快的意外或漏洞
--
?rm
我之所以问这个问题,是因为不久前我学会了这个rm
陷阱,然后就忘了,直到最近一个队友又把它带了进来。然而,我从未见过这样的建议,而且风险如此之大,我想知道我们是否应该更多地使用它?每次使用(可能还有其他命令)时,是否应该使用--
某种脚本和控制台模式?rm
答案1
在理想情况下,我想是的,我们应该系统地使用--
。但是我们都学会了使用命令rm
而不系统地输入--
,而输入它会花费额外的三次击键,所以我不认为这种情况会发生。此外,--
终止选项的惯例并不总是存在的(这就是为什么许多人在学习如何使用 时没有了解它的原因rm
)。
话虽如此,rm
在 shell 脚本中使用(和其他命令)时,你绝对应该始终谨慎编程。例如:
rm "$1" # Remove the file named in the first command line argument
是不安全的,应该rm -- "$1"
。然而,
rm "/var/spool/foo/$thatfile"
是安全的,因为的内容$thatfile
不会导致rm
误解其参数。
在您的具体示例(rm *
)中,我通常会将其用作rm ./*
安全的解决方法。