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

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

要約すると、GNUのマニュアルは少し不正確かもしれません。一部のオプション(オプションのオプション)rmの場合、パス名オペランドはオプションです。-f


1 2016年版以降の決議文以降このエラー、望むより以前のバージョン参考用。
2 POSIXは、Unixシステムとその動作方法を定義する標準です。この規格は次のもので構成されています。グループを開く。質問「もご覧ください。POSIXとは何ですか?」。

おすすめ記事