rm のマニュアルには、引数なしで実行できると書いてありますが、これは本当ではないのですか?

rm のマニュアルには、引数なしで実行できると書いてありますが、これは本当ではないのですか?

rmコマンドの概要は次のようになります。

rm [OPTION]... [FILE]...

rmオプションや引数なしでコマンドのみを使用できるという意味ではないでしょうか?
コマンドをrm単独で実行すると、ターミナルに次のエラーが表示されます。

rm: missing operand
Try 'rm --help' for more information.

なぜそうなるのか誰か教えてもらえますか?

答え1

ユーティリティの標準的な概要はrm次のように指定されています。POSIX標準では1&2として

rm [-iRr] file...
rm -f [-iRr] [file...]

最初の形式では、少なくとも 1 つのファイル オペランドが必要ですが、2 番目の形式では必要ありません。

ファイルオペランドなしで実行してもrm -fエラーにはなりません。

$ rm -f
$ echo "$?"
0

...しかし、それはあまり役に立ちません。

標準では、-fオプションについては、rmユーティリティは... と規定されています。

確認のプロンプトを表示しません。ファイル オペランドがない場合、またはオペランドが存在しない場合は、診断メッセージを書き込んだり、終了ステータスを変更したりしません。この-iオプションが以前に出現した場合は無視されます。

これにより、パス名オペランドなしで実行できる必要があり、診断メッセージやゼロ以外の終了ステータスで終了rm -fするものではないことが確認されます。rm

この事実は、多数のファイルを削除しようとするスクリプトでは非常に役立ちます。

rm -f -- "$@"

ここで、"$@"は空の場合もそうでない場合もある、または存在しないパス名を含む可能性のあるパス名のリストです。

rm -fそれでも診断メッセージを生成し、ゼロ以外の終了ステータスで終了します。権限の問題名前付きファイルが削除されるのを防ぎます。

ただし、オプションもパス名オペランドも指定せずにユーティリティを実行するとエラーになります。

$ rm
usage: rm [-dfiPRrv] file ...
$ echo "$?"
1

同じことが GNU rm(上記は OpenBSD を示していますrm) や同じユーティリティの他の実装にも当てはまりますが、正確な診断メッセージとゼロ以外の終了ステータスは異なる場合があります (たとえば、Solaris では値は 2 で、macOS では 64 です)。

結論として、GNUマニュアルは、いくつかのオプション (はオプションのオプション)rmではパス名オペランドがオプションであるというのは事実であるため、少し不正確である可能性があります。-f


2016年版以降1位、このバグ、 見る前回の版参考までに。2
POSIXはUnixシステムとは何か、どのように動作するかを定義する標準です。この標準は、オープングループ質問も参照してください」POSIX とは何でしょうか?「」。

答え2

技術的には、概要は正しいのですが、混乱を招きます。ファイル名が必要ない場合もあります。

rm --help
rm --version

(GNU を使用する場合rm)。その他の場合はファイル名が必要です。

他のバージョンでは、rmファイルはオプションではないと表示されます。例えばOpenBSD のマニュアルページ

GNU のより正確な概要は、rm次の 3 つのバリエーションを示します。

rm[オプション...]ファイル...
rm --help
rm --version

関連情報