これは多かれ少なかれ、次の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
の存在を確認し、存在する場合はこれらのいずれかを使用する唯一のオプションはありますか?)
そのために、は何ですかnawk
とoawk
?
フルまたはデスクトップの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に最初に保持されます。 oawk
はawk
の同義語です
/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
オプションを指定して呼び出された場合は、それ以外に多数の固有の拡張機能が追加されます。igawk
とpgawk
はそれ自体がgawk
の拡張機能で、最初のファイルはインクルードファイルをサポートし、2番目のファイルはプロファイリングをサポートします。
多くの有用な情報については、 GNU awk
履歴の章 も参照してください。
Solaris 11の通常のインストールでは、core-os
パッケージのみが存在することが保証されているため、oawk/awk
およびnawk
のみが存在します。特に、 新しい非大域ゾーン を作成すると、デフォルトで solaris-small-server
グループパッケージ が含まれるため、xpg4
またはgnu
awk
バイナリも使用できます。これは仕様によるものです。 solaris-small-server
グループは、アプリケーションが適切に機能するために必要なパッケージを追加するための最小の開始点です。これは、大域ゾーンにインストールされたすべてが非大域ゾーンにもインストールされていた以前の方法(Solaris 10)よりも安全で効率的であるため、ゾーンを最小化する場合は未使用のパッケージを削除する必要がありました。
POSIX awk
がこのような「小さなサーバー」インストールで移植可能な方法でサポートされるようにするには、xcu4
パッケージをインストールして、PATHをPOSIX準拠のものに設定する必要があります。
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に固有のものではないことに注意してください。 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 を参照してください