3

たとえば、シェルでtmp/ dirを削除したいとします。

Linux(ubuntuなど)では、rm tmp/ -frまたはrm -fr tmp/. しかし、Macでは、私はrm -fr tmp/.

Mac シェル (bash/zsh/...) を構成する方法はありますrm tmp/ -frか?

4

3 に答える 3

4

のようにオペランドの後にオプションを持つことrm tmp/ -frは非標準です。IEEE Std 1003.1-2001 には、セクション12.2 Utility Syntax Guidelinesがあります。

ガイドライン 9: すべてのオプションは、コマンド ラインのオペランドの前に置く必要があります。

(ほとんどの Linux ディストリビューションで使用されている) GNU ユーティリティの実装者は、多くの非標準拡張機能を追加することを選択しました。便利な場合もありますが、これらの拡張機能の使用は本質的に移植性がありません。MacOS X には BSD から派生したユーザーランドがあり、これには非標準の GNU 拡張機能のほとんどがありません。将来、BSD、Solaris、またはその他の商用 UNIX などの非 GNU システムを使用する予定がある場合は、ユーティリティの標準構文に固執し、GNU 拡張機能に慣れないようにすることをお勧めします。さまざまな UNIX オペレーティング システムで作業する場合に、多くの手間が省けます。これは、スクリプトを作成するときに特に当てはまり、重要です。スクリプトで GNU 構文に依存すると、移植できなくなります。

したがって、MacOS X に GNU coreutils をインストールする代わりに、標準の構文 (IEEE Std 1003.1、POSIX.2 など) に慣れる機会として使用することをお勧めします。

于 2012-05-04T08:11:55.303 に答える
3

使用するコマンドによって異なります。OS X は (NeXTSTEP を介して) BSD ファミリーに由来するため、それらの標準ユーティリティのほとんどは BSD から派生しています。BSD と Linux スタイルのコマンドには大きな互換性がありますが、このような実装固有の問題に遭遇することがあります。本当に Linux バージョンのコマンドを使用したい場合は、GNU coreutils パッケージをインストールできます。Homebrew (推奨) およびMacPortsから入手できます。ただし、一般的に、組み込みの BSD ツールチェーンに GNU coreutils をインストールするのは面倒です。これは、名前の衝突などがあるためです。

于 2012-05-04T07:07:37.860 に答える
0

一般に、実行するコマンドの実装に依存します。ただし、 ( rmrmを意味する場合)については、それを例として使用したため、できません。少なくとも、あなたが思うようにはなりません。

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

: という名前のファイルを削除する他の唯一の方法は-rfrm -- -rf.

于 2012-05-04T05:48:22.940 に答える