Solaris 11上のPOSIX Awk?


13

これは多かれ少なかれ、次の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ありません。これで十分です。

ただし、Solaris 11上で、唯一の存在である/usr/bin/awkにもしてgetconf PATH。があり、nawkありますoawk/usr/bin、これらはどこからでもシンボリックリンクによって示されていないことは明らかです。

SolarisがPOSIX認定を受けていることを知って、これは驚きました。

他のPOSIX準拠システムでも動作する移植可能なコードを使用して、Solaris 11でPOSIX準拠のAwkを標準的に入手するにはどうすればよいですか?(または、存在するかどうかを確認し、存在する場合はこれらのいずれnawkoawkを使用する唯一のオプションですか?)

そのことについては、何をしている nawkoawk


/usr/xpg4/bin/awkSolaris 11にはないのですか?nawkは「新しいawk」、改良されたAT&T awkです。
クサラナンダ


@StéphaneChazelasAFAIK、完全なOSインストールのみがテストされ、準拠時に適合と宣言されます。
jlliagre

@jlliagre、完全なOS(すべてのオプションパッケージがインストールされたOS)は実用的ではないため(相互に排他的なパッケージもあります)、「オプションパッケージ」の範囲を定義する必要があるため、フルOSにすることはできません。
ステファンシャゼラス

@StéphaneChazelasはい。Solaris 10にはディストリビューション全体の概念があり、すべてのパッケージ(選択されていないロケールパッケージ以外)を効果的にインストールしましたが、これはSolaris 11には当てはまりません。私の推測は、「solaris-large-server」グループテスト。
jlliagre

回答:


19

フルまたはデスクトップのSolaris 11インストールでは、3つの awk実装に加えて、いくつかのバリアントがあります。

    / usr / bin / awk pkg:/system/core-os@0.5.11-0.175.3.1.0.2.0
    / usr / bin / nawk           pkg:/system/core-os@0.5.11-0.175.3.1.0.2.0
    / usr / bin / oawk           pkg:/system/core-os@0.5.11-0.175.3.1.0.2.0

    / usr / gnu / bin / awk pkg:/text/gawk@3.1.8-0.175.3.0.0.30.0
    / usr / bin / gawk           pkg:/text/gawk@3.1.8-0.175.3.0.0.30.0
    / usr / bin / igawk pkg:/text/gawk@3.1.8-0.175.3.0.0.30.0
    / usr / bin / pgawk pkg:/text/gawk@3.1.8-0.175.3.0.0.30.0

    / usr / xpg4 / bin / awk       pkg:/system/xopen/xcu4@0.5.11-0.175.3.0.0.30.0

さまざまな標準に準拠していますが、すべて「標準準拠」です。

  • /usr/bin/awkawk1977年にリリースされた従来のUNIX 実装に準拠していますawk。後続のリリースが互換性を損なうため、既存のスクリプトを壊さないようにデフォルトのシステムPATHで最初に保持されます。oawkの同義語ですawk

  • /usr/bin/nawkawkはの「新しい」バージョンで、1986年にSVR3.1で最初に出荷されましたAwk。POSIX標準はこの実装に基づいていました。/usr/xpg4/bin/awk前者とほとんど同じですが、POSIX適合性検証テストに対して正式にチェックされるものです。

  • /usr/gnu/bin/awk/usr/bin/gawkGNUのバリアントでもありawkます。環境内POSIXLY_CORRECTで環境変数が設定されている場合、または-W posixオプションを使用して呼び出された場合、POSIX標準のほとんどまたはすべてに準拠することを目的としていますが、それ以外の特定の独自の拡張機能を追加します。igawkそしてpgawkそれ自体がの拡張でgawkあり、最初のものはインクルードファイルをサポートし、2番目のものはプロファイリングをサポートします。

多くの有用な情報については、GNUのawk歴史の章も参照してください。

のみcore-osのパッケージは、このようにだけ、Solarisの11通常のインストールの上に存在することが保証されているoawk/awknawkあります。特に、新しい非大域ゾーンを作成すると、デフォルトでsolaris-small-serverグループパッケージが含まれるためxpg4gnu awkバイナリもバイナリも使用できません。これは仕様です。solaris-small-serverグループは、あなたが適切に動作するアプリケーションのために必要なパッケージを追加した最小限の開始点です。これは、グローバルゾーンにインストールされているすべてのものが非グローバルゾーンにもインストールされていた以前の(Solaris 10)方法よりも安全で効率的です。

そのawkような「小さなサーバー」インストールでPOSIX サポートを移植可能な方法で取得するには、xcu4パッケージをインストールし、POSIX準拠のものにPATHを設定する必要があります。

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

万一あなたがそのパッケージをインストールしたくない何らかの理由で、この問題を回避するには、「カスタム」を使用することですPATH含むnawkとして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問題が発生します。

また/usr/xpg4/bin/awk、Solaris 11システムの欠如はPOSIX準拠の失敗ではないことに注意してください。OracleおよびISV(Open Group認定プログラムを含む)によって実行されるテストの大部分では、完全なSolarisインストールのみが使用されます。縮小インストールはサポートされていますが、認定されていません。

Solaris 11のシェルスクリプト(またはシェルスクリプトを埋め込むアプリケーション/シェルコマンドを呼び出すアプリケーション)を配布する場合/system/xopen/xcu4IPSパッケージで依存関係として定義するだけでよく、インストーラーはスクリプトが適切に機能するために必要なことを自動的に行います:

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

https://docs.oracle.com/cd/E53394_01/html/E54820/dependtypes.htmlを参照してください


3
POSIX準拠のawkの欠如は、POSIX準拠の失敗です。POSIX準拠のawkを持たないシステムは、POSIX準拠のスクリプトを実行できません。これらの小さなサーバーはPOSIXではなく、Unixシステムでもありません。そして、Open Groupから取得したSolarisの証明書でカバーされていないと思います。
ステファンシャゼラス

1
@StéphaneChazelasはい、これらのシステムは認定されていないため、明らかに対象外です。Solarisが認定されていないハードウェアにインストールされている場合も同様です。POSIX / Unix準拠は、Solarisが適切に機能するための前提条件ではありません。Solaris自体は、POSIXユーティリティとは異なり、POSIXユーティリティを使用しません。
-jlliagre

@StéphaneChazelasいずれの場合でも、POSIX awkは常にSolarisシステムまたは非大域ゾーンに存在するため、問題は可用性に関するものではなく、コマンドの名前(nawkvs awk)に限定されます。docs.oracle.com/cd/E53394_01/html/E54763/nawk-1.html
jlliagre

1
nawkほとんどPOSIXです(CONVFMTたとえば、サポートしていません)が、はい、少なくともgrep(POSIXがない-e/ -Eたとえば)またはtr(ない)ほど悪くはありませんtr a-f A-F
ステファンシャゼル

@StéphaneChazelas確かに、明確化が私の返信に追加されました。ありがとう。
jlliagre
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.