web-dev-qa-db-ja.com

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/awk'!x[$0]++'などのPOSIX標準Awk構文を受け入れませんが、/usr/xpg4/bin/awkは受け入れます。これまでのところ十分です。

ただし、Solaris 11では、/usr/bin/awkがあってもgetconf PATHしかありません。 nawkもあり、oawk/usr/binですが、これらは明らかにどこからのシンボリックリンクによっても参照されていません。

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

他のPOSIX準拠システムでも動作するポータブルコードを使用して、Solaris 11でPOSIX準拠のAwkを標準で取得するにはどうすればよいですか? (または、nawkまたはoawkの存在を確認し、存在する場合はこれらのいずれかを使用する唯一のオプションはありますか?)

そのために、は何ですかnawkoawk

13
Wildcard

フルまたはデスクトップのSolaris 11インストールでは、3つのawkの実装といくつかのバリアントが利用可能です。

/usr/bin/awk pkg:/system/[email protected] 
/usr/bin /ひどい pkg:/system/[email protected]/usr/bin /oawk pkg:/system/[email protected]/usr/gnu/bin/awk pkg :/text/[email protected] 
/usr/bin /ガウク pkg:/text/[email protected]/usr/bin/igawk pkg:/text/[email protected]/usr/bin/pgawk pkg: /text/[email protected]/usr /xpg4/bin/awk pkg:/system/xopen/[email protected]

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

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

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

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

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

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

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

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

何らかの理由でそのパッケージをインストールしたくない場合の回避策は、PATHnawkとして含む「カスタム」の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に固有のものではないことに注意してください。 similar package grouping はすでにSolaris 10以前で存在し、POSIX準拠のユーティリティは「エンドユーザー」、「開発者」にのみインストールされました"および"フルインストール "メタクラスター。 「コア」または「ネットワーキングサポート」メタクラスターでシステムまたはゾーンをインストールすると、まったく同じxpg4不足の問題が発生します。

Solaris 11システムに/usr/xpg4/bin/awkがないことは、POSIX準拠の障害ではないことにも注意してください。 Open Group認定 プログラムを含む、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/dependtypes.html を参照してください

19
jlliagre