2017-12-06 8 views
2

Linuxシステムでは、rm * -rfのようなコマンドをシェルに入力すると、*-rfの順番は関係ありません。私のシェルはそれを同じように解釈します。さて、私のMac上で私が入力したときにrm -rf *すべてが正常に動作しますが、私はrm * -rfを行う場合は、エラーは、私はMacOSの両方の魚やbashのシェルとLinux上でそれを試してみましたrm: -rf: No such file or directorymacosコマンドラインパラメータが最後に動作しない

を示しています。同じ問題。

macOS上のコマンドインタープリタが、コマンドの最後にある-rfがコマンドのパラメータとして解釈されないと思われる理由が分かりますか?

+1

異なるコマンドインタープリタ(シェル)ではありません。これは 'rm'コマンドです。伝統的に、Unixのコマンドでは、すべてのオプションがオプションではない引数の前に来る必要があります。 GNUユーティリティとGNUスタイルで書かれたものは、オプションと非オプションの引数を混在させることができます。 OSXはBSDの派生物であり、より伝統的な振る舞いを示しています。 –

答えて

1

これはシェルに関するものではなく、コマンドに関するものです。 コマンドライン引数の構文解析は、シェルの機能と責任ではなく、実際のコマンドの責任です。 両方のシステムでは、シェルは指定された順番でコマンドライン引数を忠実に渡します。そして、コマンドの実装に従います。

コアユーティリティは通常GNU実装の ですが、osxではコアユーティリティは通常BSD実装です。

コマンドのmanページでは、どの実装であるかがわかります。

たとえば、Linuxでman rmの最後の行はこのようなものです:OSXで

GNU coreutils 8.21    March 2016        RM(1) 

BSD       January 28, 1999       BSD 
1

任意のシェルの引数の順序歴史的にはUNIXに関係してきました。オプションの構文解析を停止するために(で始まるファイルを削除することができるように、 " - - " など)

参照くださいRM(1)とのgetopt(3)manページ

RMは偶然にも、オプションを持っていますシェルは、ちょうど結果がこの順序で何でしょう与えられた引数の順序を尊重していない場合

$ touch a b 
$ mv a b 

どのファイルのままでしょうか?

関連する問題