2012-05-04 1 views
3

シェルでtmp/ dirを修復したいと思います。shell:linuxのようなコマンドスタイルの `rm tmp/-fr`をMacで使うことができます

Linuxでは(ubuntuのように)、私はrm tmp/ -frまたはrm -fr tmp/です。しかし、Macでは、私はrm -fr tmp/しかできません。

Macシェル(bash/zsh/...)を設定する方法はないので、linuxのようなコマンドスタイルを使うことができます:rm tmp/ -fr

+0

あなたは他にどのような「UNIX」ということであることを意味します。 UNIXはブランドであり、オペレーティングシステムではありません(Solaris、AIX、HP/UXなど)。 –

+0

私はそう、それはBSDによって制限されています(その他のubuntu、赤い帽子、)「Linuxの – smilingpoplar

答えて

4

非標準であるrm tmp/ -frのようにオペランドの後にオプションを持ちます。 IEEE規格1003.1-2001はセクション12.2 Utility Syntax Guidelinesにしています

Guideline 9: All options should precede operands on the command line.

GNUユーティリティ(ほとんどのLinuxディストリビューションで使用されるような)の実装は、多くの非標準の拡張機能を追加することを選択しました。便利なこともあるが、これらの抽出を使用することは本質的に不可能である。 MacOS Xには、BSDから派生したユーザランドがあります.BSDは、非標準のGNU拡張の大部分を持っていません。将来、BSD、Solaris、その他の商用UNIXなどの非GNUシステムで作業することを期待している場合は、ユーティリティの標準構文に固執し、GNU拡張に慣れないでください。これは、そこにあるすべての異なるUNIXオペレーティングシステムで作業するときに多くの面倒を節約します。これは、スクリプトを書くときに特に真実で重要です。スクリプトのGNU構文に依存すると、それらは移植不可能になります。

代わりのMacOS X上でのGNU coreutilsのをインストールするので、私のアドバイスは、標準の構文(IEEE STD 1003.1、POSIX.2など)に慣れるための機会としてそれを使用することです。

+0

+1:あなたの最終提案には他には何もありません。 –

+0

すばらしい説明:) – smilingpoplar

0

は、それは一般的な、それはあなたが実行するコマンドの実装に依存するであろう。しかし、rm(あなたはrmを意味します)を例として使用しているため、できません。少なくともあなたが思うことはしません。

  • rm -fr tmp/:オプション-r-fので、再帰的(ここでは必須)と強制してディレクトリtmp/を削除します。
  • rm tmp/ -fr:ディレクトリtmp/および/または-frという名前のファイル/ディレクトリ を削除する(しようと)しますが、エラーを生成します:​​。

-rfという名前のファイルを削除する唯一の他の方法はrm -- -rfを使用することです。

+0

にそれを明確に? – smilingpoplar

+0

おそらく、おそらくそうではありません。私はBSDライクなOSやLinux OSを利用できません。しかし、それぞれのマニュアルページだけが見つかりましたが、それは可能ではないことを示唆しています。 YMMV。 –

3

それはあなたが使用するコマンドによって異なります。 OS XはBSDファミリから(NeXTSTEP経由で)提供されているので、標準ユーティリティはBSDのものです。 BSDとLinuxのスタイルコマンドの間には大きな互換性がありますが、このような実装固有の事柄にぶつかります。実際にLinux版のコマンドを使用したい場合は、GNU coreutilsパッケージをインストールすることができます。 Homebrew(推奨)とMacPortsから入手できます。しかし、一般に、名前の衝突などのために、組み込みのBSDツールチェーンにGNU coreutilsをインストールするのは苦痛です。

関連する問題