POSIX 2008のすべてのエディションのHTMLバージョンをオンラインで見つけることができます。
これは2008年版に追加されました。
技術的な正誤表は、一般的に新しい機能を追加しません。
前のバージョン(http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html)(POSIX 2004)にはそのテキストがありませんでした。
新しいテキストは、2003-05-09オースティングループ会議で承認され、後の標準改訂版に組み込まれました。
それはされた同じ年という月にサン・マイクロシステムズのジョン・ベックによって要求された(リンクも参照、登録が必要とは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は、rm
追加--preserve-root
して--no-preserve-root
のオプションこの2003年11月9日には、コミットが、--preserve-root
唯一のデフォルトになったコミットこの2006年9月3日、そうcoreutilsの6.2で
FreeBSDは、2004-10-04のコミット(「下着の防炎性を調べる」コミットログを使用)からスラッシュを保持していましたが、最初は、下ではなく、10年後にPOSIXがチェックされたことを思い出すまで、POSIXモードで行われた時点でそれを強制します。POSIXLY_CORRECT
FreeBSDの最初のコミットでは、Solarisはその時点ですでにそれを行っていたと述べています。
@JdePB(下記コメント)は、Sunのインサイダーストーリーへのリンクを確認し、Solarisの起源に関する詳細を提供し、オースティングループへのリクエストを行う前にSolarisがすでに適切な手段を備えていることを示唆しました。
その除外を追加する理由を説明します。行う場合にのみ自分を責めるrm -rf /
ことができますがrm -rf -- "$1/$2"
、$1
/ $2
リンクが提供されていることを確認せずに実行するとスクリプトが実行できる場合があります。
削除を禁止.
し、..
そのずっと前に添加し、そして再び潜在的な事故に対する保護に。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/*
また、すべてを削除します。シェルファイル名の補完は、このような問題を引き起こすことが知られています。
rm -rf someth<Tab>/*
展開先:
rm -rf something /*
それsomething
はディレクトリではなかったからです。
tcsh
またはのようなシェルは、ワイルドカードzsh
を使用してコールしようとすると、追加のプロンプトを追加します(デフォルトではありません)。rm
*
tcsh