LinuxとMac OSのBash


27

iMacを購入しています。私は長い間Linuxに取り組んでおり、たくさんのbashスクリプトを作成しています。すべてのbashコマンドと機能がMac OSで利用できるかどうか疑問に思っていましたか?Mac bashスクリプトの経験はありますか?ご意見ありがとうございます。

回答:


32

Bash自体はほとんど同じです。いくつかの小さな違いがありますが、これらのいずれもスクリプトの移植性に影響しません。

主な問題は、MacOSのcoreutilsがFreeBSDベースであることと、使用しているユーティリティがGNUプロジェクトのものである可能性が高いことです。FreeBSD coreutilsは、GNU coreutilsと常に互換性があるとは限りません。GNUバージョンとFreeBSDバージョンのsedgrepps、およびその他のユーティリティには、パフォーマンスと動作の違いがあります

あなたは、GNU coreutilsのをインストールすることができますが、彼らは持っているg-接頭辞(例えばgcatのためにcat)。それはです良いアイデアではないのGNU coreutilsのでのMacOSのcoreutilsを交換します。


6
標準のFreeBSDベースのコアユーティリティを使用すると、スクリプトの移植性に影響を与える可能性がある(たとえば、フラグが異なるなど)ことを強調する必要あります。UbuntuスクリプトがMacで同じ出力を生成しなかった理由を解明しようとして、何度も頭を壁にぶつけました。psgrep
クリスグレッグ

1
スクリプトを移植可能にする場合、www2.opengroup.org / ogsys / jsp / publications / mainPage.jspは、POSIXおよびXCUユーティリティおよびコマンドの厳密に標準的な仕様を取得するのに最適な場所です。
小次郎

@ChrisGregg:同意します。2つのツールセットの間に非互換性があることを強調するために、回答に少し追加しました。

5

問題があれば、bashMac OS XのMountain Lionはまだバージョン3.2です。最近のほとんどのLinuxディストリビューションには4.xが同梱されているため、バージョン4の機能が失われます。現在、回避策としてバージョン4.2.45がHomebrewから入手できます。Mavericksのバージョンがわからない。知っている人なら誰でもまだ言うことができるかどうかわからない。

他の人が述べたように、(すでに述べたバージョン以外)bashは同じbashですが、Mac OS Xは(大部分)BSDユーザーランドを使用します。標準システムユーティリティの多くは、オプションが若干異なるか、動作が少し異なります。残念ながら、ここにリストするには数が多すぎます。


2
4年後、High Sierraのbashはまだ使用しています:GNU bash、バージョン3.2.57(1)-release(x86_64-apple-darwin17)Copyright(C)2007 Free Software Foundation、Inc.
Nate Lockwood

4

インストール自作(パッケージマネージャ)、その後、いくつかの基本的なユーティリティのGNU版をインストールします。

$ brew install coreutils
$ brew install gnu-sed

インストールのたびに、従うことができる手順が表示されるので、たとえば、単に呼び出すのdateではgdateなく、変更せずにLinux bashスクリプトを使用できます。

おめでとうございます。これでクロスプラットフォームスクリプティングの問題の99%が解決されました。


3
一方、スクリプトが実際に移植可能であることが意図されている場合は、症状ではなくスクリプトを修正する必要があります。
トリプリー

2

LinuxからMacに来るのがいらいらすることの1つは、/proc疑似ファイルシステムがないことです。これにより多くのLinuxスクリプトが壊れてしまい、procMac bashスクリプトに同じ情報を取得する適切な方法を見つけるのが難しくなります。


0

私は「主にLinuxで、時々Macを使う」ユーザーで、次のことがわかります。

bash、~/.bashrcおよび~/.bash_aliasesほとんど同じように動作します。

私が見つけた問題の1つは、色プロンプトを変更するコマンドの1つがMacで機能しなかったことです。それと他の経験から、.bashrcファイルを設定するときに端末ウィンドウを開いたままにしてログインすることを学びました。それは、「新しいウィンドウ」をテストし、まだログインしているウィンドウでエラーを見つけることができるということでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.