私は "grep"システムコマンドを実行する関数を含むRパッケージを作成しました。このパッケージはCRANでリリースされ、Solarisプラットフォームでテストするとエラーが返されました。これは、Solaris で「grep」の使用法が異なるためです。以下は、このパッケージが実行するコマンドの例です。
grep --include=\*\.txt --colour=always -n -r -e 'PATTERN'
このコマンドは、現在のフォルダ、サブフォルダなどで見つかったすべての「txt」ファイルから「PATTERN」パターンを再帰的に検索します(再帰検索)。
このコマンドで生成されたエラーメッセージはなく、エラーが発生したことに注意してください。 Solarisで同等のコマンドは何ですか?
答え1
この問題の核心は、POSIXの互換性に関連していると思います。grep
POSIX規格に規定されているツールです。コメントで指摘したように、POSIX仕様にはまたはオプションはgrep
含まれていません。実際、これらのオプションはGNUの一部であり、POSIX仕様で指定されたもの以上の機能を追加します。 GNUのマニュアルはここにあります:--include
--colour
grep
grep
grep
https://www.gnu.org/software/grep/manual/grep.html
Solarisの基本ツールは、grep
Sun / Oracleが提供する別のPOSIX準拠の実装です。もちろん、この実装はここで必要なオプションをサポートしていません。 Solaris 10 マンページがあります。ここ、Solaris 11を見つけることができますここ。
この制限はgrep
Solaris のコマンドを超えています。たとえば、date
SolarisのコマンドはGNUのコマンドよりも柔軟性が低くなりますdate
。 Solaris 10のコマンドはps
また、プロセスのコマンドラインを80文字に切り捨てます。これらの問題に対する解決策/解決策として、最終的にSolaris 10および11でGNUツールを使用できます。今回の品質検査見つけることができる場所とインストール方法の詳細を確認してください。
GNU ツールが Solaris システムにインストールされ、ツール名が使用される場合、a はg
コマンド名の接頭辞として使用されます。date
したがって、、、、gdate
などにgrep
なります。ggrep
このコマンドを使用すると、ggrep
必要なGNU固有のオプション(または拡張)がサポートされているため、問題を解決できます。
ここで発生する可能性のある問題は、SolarisシステムにGNUツールをインストールする必要がないことです。これらのパッケージをインストールするには、いくつかの追加作業が必要です。ターゲットにGNUツールがない場合、このggrep
コマンドは使用できません。
一般に、POSIXディストリビューション間の移植性を目指すソリューションは、反対のアプローチをとります。各プラットフォームに固有のツールを使用する代わりに、ソリューションはPOSIX仕様に準拠するように意図的に変更されており、特定の実装に固有の拡張を使用しません。これは、ソリューションがすべてのPOSIX互換システムで一貫して動作することを保証する唯一の方法です。