回答:
Bash自体はほとんど同じです。いくつかの小さな違いがありますが、これらのいずれもスクリプトの移植性に影響しません。
主な問題は、MacOSのcoreutilsがFreeBSDベースであることと、使用しているユーティリティがGNUプロジェクトのものである可能性が高いことです。FreeBSD coreutilsは、GNU coreutilsと常に互換性があるとは限りません。GNUバージョンとFreeBSDバージョンのsed、grep、ps、およびその他のユーティリティには、パフォーマンスと動作の違いがあります。
あなたは、GNU coreutilsのをインストールすることができますが、彼らは持っているg-
接頭辞(例えばgcat
のためにcat
)。それはです良いアイデアではないのGNU coreutilsのでのMacOSのcoreutilsを交換します。
問題があれば、bash
Mac OS XのMountain Lionはまだバージョン3.2です。最近のほとんどのLinuxディストリビューションには4.xが同梱されているため、バージョン4の機能が失われます。現在、回避策としてバージョン4.2.45がHomebrewから入手できます。Mavericksのバージョンがわからない。知っている人なら誰でもまだ言うことができるかどうかわからない。
他の人が述べたように、(すでに述べたバージョン以外)bash
は同じbash
ですが、Mac OS Xは(大部分)BSDユーザーランドを使用します。標準システムユーティリティの多くは、オプションが若干異なるか、動作が少し異なります。残念ながら、ここにリストするには数が多すぎます。
インストール自作(パッケージマネージャ)、その後、いくつかの基本的なユーティリティのGNU版をインストールします。
$ brew install coreutils
$ brew install gnu-sed
インストールのたびに、従うことができる手順が表示されるので、たとえば、単に呼び出すのdate
ではgdate
なく、変更せずにLinux bashスクリプトを使用できます。
おめでとうございます。これでクロスプラットフォームスクリプティングの問題の99%が解決されました。
私は「主にLinuxで、時々Macを使う」ユーザーで、次のことがわかります。
bash、~/.bashrc
および~/.bash_aliases
ほとんど同じように動作します。
私が見つけた問題の1つは、色プロンプトを変更するコマンドの1つがMacで機能しなかったことです。それと他の経験から、.bashrc
ファイルを設定するときに端末ウィンドウを開いたままにしてログインすることを学びました。それは、「新しいウィンドウ」をテストし、まだログインしているウィンドウでエラーを見つけることができるということでした。
ps
grep