您可以在线找到POSIX 2008所有版本的HTML版本:
这是在2008年版中添加的。
技术勘误通常不会添加新功能。
您可以看到以前的版本(http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html)(POSIX 2004)没有该文本。
新文本在2003年5月9日的奥斯丁小组会议上被接受,因为它包含在该标准的更高版本中。
它要求由Sun Microsystems公司的约翰·贝克在三月份同一年(链路需要OpenGroup的注册,也见增强请求号5在这里)。
约翰·贝克(John Beck)在2003年3月11日星期二写道:
@ page 820 line 31681-31683 section rm comment {JTB-1}
Problem:
Defect code : 3. Clarification required
An occasional user mistake, with devastating consequences, is to
write a shell script with a line such as:
rm -rf $VARIABLE1/$VARIABLE2
or
rm -rf /$VARIABLE1
without verifying that either variable is set, which can lead to
rm -rf /
being the resulting command. Since there is no plausible
circumstance under which this is the desired behavior, it seems
reasonable to disallow this. Such a safeguard would, however,
violate the current specification.
Action:
Either extend the exceptions for . and .. on the noted lines
to list / as well, or specify that the behavior of rm if an
operand resolves to / is undefined.
GNU 在此2003-11-09 commit中rm
添加了--preserve-root
和--no-preserve-root
options ,但在2006-09-03 commit中仅成为默认选项,因此在coreutils 6.2中--preserve-root
从2004年10月4日提交以来, FreeBSD一直保留斜线(带有“查找我的内衣实际上是如何防火的”提交日志),但是最初不是在下时,直到他们记得十年后才检查POSIX现在在POSIX模式下强制完成该操作。POSIXLY_CORRECT
FreeBSD最初提交提到Solaris当时已经在这样做。
@JdePB(在下面的评论中)发现,该链接与Sun内部人员的故事相关,从而证实了Solaris的起源,并提供了更多详细信息,并暗示Solaris在向Austin组提出请求之前已经采取了安全措施。
它解释了添加该排除的理由。尽管这样做只能怪罪自己rm -rf /
,但在某些情况下,脚本可以在rm -rf -- "$1/$2"
不检查是否提供了$1
/ 的情况下做到这$2
一点,这在错误地使用Solaris补丁程序时(根据该链接)使某些Sun客户感到不满。
禁止删除.
和..
早在很久以前就添加了,以防止潜在的不幸事故。rm
仍然是一个危险的命令。它完成了它要执行的操作:删除告诉您的内容。
rm -rf /*
cd /tmp && rm -rf .*/ # on some systems where rm -rf ../ still removes
# the content of ../ and shells that still
# may include . and .. in glob expansions.
rm -rf -- "$diretcory"/* # note the misspelled variable name
dir='foo '; rm -rf $dir/*
还将删除所有内容。已知Shell文件名完成会导致此类问题
rm -rf someth<Tab>/*
扩展到:
rm -rf something /*
因为something
碰巧不是目录。
当尝试使用通配符调用时,shell tcsh
或zsh
会添加一个额外的提示(默认情况下不是)。rm
*
tcsh