プログラムでawkフレーバーを検出する方法(gawkとnawkなど)
私は基本的にbashシェルスクリプトのコレクションであるコマンドラインアプリケーションを使用しています。アプリケーションは、BSD / OSXおよびLinuxで実行するように作成されました。スクリプトの1つはawkに依存しています。これには2つのawkコマンドが含まれています。1つはnawk(標準のBSD awk実装)用に記述され、もう1つはgawk(GNU awk実装)用に記述されています。 問題の2つのawkコマンドは、異なる環境との互換性がありません。特に、gawkで実行するとnawkコマンドが失敗します。スクリプトは、uname -sホスト環境を判別するためにカーネル名(つまり)をチェックし、適切なawkコマンドを実行します。ただし、GNUコアユーティリティがインストールされたMac OS Xで作業することを好むため、スクリプトは正しく実行されません。 このバグを修正する最善の方法を考える過程で、できれば比較的堅牢で移植性のある方法で、一般的なコマンドラインユーティリティの異なるフレーバーをプログラムで区別する方法を知っておくとよいと思いました。 nawkがバージョン情報を出力するための「-V」フラグを受け入れないことに気付いたので、次のようなものが機能するはずだと考えました。 awk -V &>/dev/null && echo gawk || echo nawk 別のバリエーションは次のとおりです。 awk -Wversion &>/dev/null && echo gawk || echo nawk これは私の2つのテスト環境(OS XとCentOS)で動作するようです。ここに私の質問があります: これは最善の方法ですか? これを拡張してawkの他のバリエーション(例:mawk、jawkなど)を処理する方法はありますか? awkの他のバージョンについても心配する価値がありますか? また、私はawkについてほとんど知らないことも述べておきます。