Solaris 11のPOSIX Awk?

Solaris 11のPOSIX Awk?

これは、次の2つの質問に対する後続の質問です。

Solaris 10(SunOS 5.10)では、次の結果が得られました。

$ type -a awk
awk is /usr/bin/awk
$ PATH="$(getconf PATH)" type -a awk
awk is /usr/xpg4/bin/awk
awk is /usr/bin/awk
$

たとえば、Solaris 10では/usr/bin/awkPOSIX標準Awk構文は許可されていませんが、'!x[$0]++'許可され/usr/xpg4/bin/awkています。これまでは十分です。

/usr/bin/awkしかし、Solaris 11にはEvenとisしかありませんgetconf PATH。 isnawkoawkisもありますが、/usr/bin明らかにこれらはどこでもシンボリックリンクとして指定されていません。

私はSolarisがPOSIX認証を受けたことを知って驚きました。

他のPOSIX互換システムでも実行されている移植可能なコードを使用して、Solaris 11でPOSIX互換Awk標準を取得するにはどうすればよいですか? (またはnawk存在するかどうかを確認し、存在する場合はそのいずれかを使用する唯一のオプションですかoawk?)

その問題に関しては、何はい nawkそしてoawk

ベストアンサー1

フルインストールまたはデスクトップSolaris 11インストールには、次のものがあります。サム awk利用可能な実装といくつかの変形:

    /usr/bin/awk パッケージ:/システム/[Eメール保護]
    /usr/bin/ノック          パッケージ:/システム/[Eメール保護]
    /usr/bin/あざ          パッケージ:/システム/[Eメール保護]

    /usr/gnu/bin/awk パッケージ:/text/[Eメール保護]
    /usr/bin/愚かな          ラッパー:/テキスト/[Eメール保護]
    /usr/bin/igawk パッケージ:/text/[Eメール保護]
    /usr/bin/pgawk パッケージ:/text/[Eメール保護]

    /usr/xpg4/bin/awk      パッケージ: /system/xopen/[Eメール保護]

異なる規格に準拠していますが、すべて「標準準拠」です。

  • /usr/bin/awkawk1977年にリリースされた以前のUNIX実装に準拠しています。awk後続のバージョンで互換性が中断された場合は、既存のスクリプトが中断されるのを防ぐために、まずデフォルトのシステムPATHに保存されます。oawk例の同義語awk

  • /usr/bin/nawkはい、「新しい」バージョンはawk1986年にSVR3.1で最初にリリースされました。 POSIXAwk標準はこの実装に基づいています。/usr/xpg4/bin/awk前者とほぼ同じですが、後者は正式にPOSIX適合性検証テストによって確認されます。

  • /usr/gnu/bin/awk/usr/bin/gawkまたawkPOSIXLY_CORRECT環境で環境変数を設定したり、オプションを使用して呼び出すときは、ほとんどまたはすべてのPOSIX標準に準拠するように設計されていますが、-W posixそれ以外には独自の多くの特定の拡張機能が追加されます。それは拡張自体igawkであり、最初はインクルードファイルをサポートし、2番目は分析をサポートします。pgawkgawk

また見てくださいGNUawk歴史章有用な情報をたくさん入手してください。

core-osパッケージは通常のSolaris 11インストールにのみ存在することが保証されているため、oawk/awkおよびnawk。特に、作成時に新しい非大域ゾーン、デフォルトでは次のものが含まれます。solaris-small-serverグループパッケージしたがって、xpg4バイナリは使用できませんgnu awk。これは意図的に設計されています。このsolaris-small-serverグループは、アプリケーションが正しく機能するために必要なパッケージを追加できる最小限の開始点です。これは、大域ゾーンにインストールされているすべての項目が非大域ゾーンにもインストールされる以前の方法(Solaris 10)よりも安全で効率的であるため、ゾーンを最小限に抑えるために未使用のパッケージを削除する必要があります。

awkこれらの「小型サーバー」インストールで移植可能な方法でPOSIXサポートを受けるには、パッケージをインストールしてxcu4PATHをPOSIX互換パッケージに設定する必要があります。

pkg install xcu4
PATH=$(getconf PATH):$PATH

何らかの理由でパッケージをインストールしたくない場合は、回避策はasをPATH含むnawk"custom"を使用することですawk。たとえば、次のようになります。

mkdir -p /opt/posix/bin
cp /usr/bin/nawk /opt/posix/bin/awk
PATH=/opt/posix/bin:$PATH

または、最初にインストールしGNU awkて設定することPATHもできます。

pkg install gawk
PATH=/usr/gnu/bin:$PATH

これはSolaris 11に固有のものではありません。類似パッケージのグループ化Solaris 10以前にすでに存在しているPOSIX互換ユーティリティは、エンドユーザー、開発者、およびフルインストールメタクラスタにのみインストールされます。システムまたはゾーンに「コア」または「ネットワークサポート」メタクラスタがインストールされている場合、同じxpg4欠落の問題が発生します。

さらに、Solaris 11 システムの不在は/usr/xpg4/bin/awkPOSIX 準拠の失敗ではありません。 OracleとISVによって行われたほとんどのテストでは、次のような完全なSolarisインストールのみを使用しました。公開グループ認証プログラム。削減された設置量はサポートしかし、資格のある

Solaris 11用のシェルスクリプト(またはシェルスクリプトを含めるか、シェルコマンドを呼び出すアプリケーション)を展開する場合は、/system/xopen/xcu4それを依存関係として定義するだけです。IPSパッケージとインストーラは、スクリプトが正しく機能するために必要なタスクを自動的に実行します。

depend fmri=pkg:/system/xopen/xcu4 type=require

バラよりhttps://docs.oracle.com/cd/E53394_01/html/E54820/dependenttypes.html

おすすめ記事