たとえば、シェルでtmp/ dirを削除したいとします。
Linux(ubuntuなど)では、rm tmp/ -fr
またはrm -fr tmp/
. しかし、Macでは、私はrm -fr tmp/
.
Mac シェル (bash/zsh/...) を構成する方法はありますrm tmp/ -fr
か?
たとえば、シェルでtmp/ dirを削除したいとします。
Linux(ubuntuなど)では、rm tmp/ -fr
またはrm -fr tmp/
. しかし、Macでは、私はrm -fr tmp/
.
Mac シェル (bash/zsh/...) を構成する方法はありますrm tmp/ -fr
か?
のようにオペランドの後にオプションを持つこと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 など) に慣れる機会として使用することをお勧めします。
使用するコマンドによって異なります。OS X は (NeXTSTEP を介して) BSD ファミリーに由来するため、それらの標準ユーティリティのほとんどは BSD から派生しています。BSD と Linux スタイルのコマンドには大きな互換性がありますが、このような実装固有の問題に遭遇することがあります。本当に Linux バージョンのコマンドを使用したい場合は、GNU coreutils パッケージをインストールできます。Homebrew (推奨) およびMacPortsから入手できます。ただし、一般的に、組み込みの BSD ツールチェーンに GNU coreutils をインストールするのは面倒です。これは、名前の衝突などがあるためです。
一般に、実行するコマンドの実装に依存します。ただし、 ( rmrm
を意味する場合)については、それを例として使用したため、できません。少なくとも、あなたが思うようにはなりません。
rm -fr tmp/
tmp/
:オプション-r
とを使用してディレクトリを削除する-f
ため、再帰的 (ここでは必須) で強制的です。rm tmp/ -fr
tmp/
: は、という名前のディレクトリおよび/またはファイル/ディレクトリを削除しようと (試み)ます-fr
が、エラーが発生します: rm: tmp/ directory
.注: という名前のファイルを削除する他の唯一の方法は-rf
、rm -- -rf
.