rm
の標準的な概要 utility は POSIX 標準で次のように指定されています
rm [-iRr] file...
rm -f [-iRr] [file...]
最初の形式では少なくとも 1 つのファイル オペランドが必要ですが、2 番目の形式では必要ありません。
rm -f
を実行しています ファイルオペランドなしはエラーではありません:
$ rm -f
$ echo "$?"
0
...しかし、あまり効果がありません。
標準では、-f
に対して オプション、rm
ユーティリティは...
確認を求めません。ファイルオペランドがない場合、またはオペランドが存在しない場合は、診断メッセージを書き込んだり、終了ステータスを変更したりしないでください。以前の -i
の発生 オプションは無視されます。
これにより、 rm -f
を実行できる必要があることが確認されました パス名オペランドなしで、これが rm
になるものではないこと 診断メッセージまたはゼロ以外の終了ステータスで終了します。
この事実は、多数のファイルを削除しようとするスクリプトで非常に役立ちます
rm -f -- "[email protected]"
どこで "[email protected]"
空であるかどうか、または存在しないパス名を含む可能性のあるパス名のリストです。
(rm -f
権限の問題がある場合は、引き続き診断メッセージを生成し、ゼロ以外の終了ステータスで終了します 指定されたファイルが削除されるのを防ぎます)
ただし、オプションもパス名オペランドも指定せずにユーティリティを実行するとエラーになります:
$ rm
usage: rm [-dfiPRrv] file ...
$ echo "$?"
1
同じことが GNU rm
にも当てはまります (上記は OpenBSD rm
を示しています ) と同じユーティリティの他の実装では、正確な診断メッセージとゼロ以外の終了ステータスが異なる場合があります (たとえば、Solaris では値が 2 で、macOS では 64 です)。
結論として、GNU rm
いくつかのオプション (-f
、これはオプションのオプションです)、パス名オペランドはオプションです。
2016 年版以降、このバグの解決後、参照用に前の版を参照してください。
POSIX は、Unix システムとは何か、およびその動作を定義する標準です。この標準は、The Open Group によって公開されています。 「正確には POSIX とは何ですか?」という質問も参照してください。
技術的には、あらすじは正しいのですが、ややこしいです。ファイル名が不要な場合もあります:
rm --help
rm --version
(GNU rm
を使用する場合) )。その他の場合はすべてファイル名が必要です。
rm
の他のバージョン ファイルを非オプションとして表示します。例
GNU rm
のより正確な概要 3 つのバリアントが表示されます:
rm
[オプション ...] ファイル ...
rm --help
rm --version