これは、次の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
POSIX標準Awk構文は許可されていませんが、'!x[$0]++'
許可され/usr/xpg4/bin/awk
ています。これまでは十分です。
/usr/bin/awk
しかし、Solaris 11にはEvenとisしかありませんgetconf PATH
。 isnawk
とoawk
isもありますが、/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/awk
awk
1977年にリリースされた以前のUNIX実装に準拠しています。awk
後続のバージョンで互換性が中断された場合は、既存のスクリプトが中断されるのを防ぐために、まずデフォルトのシステムPATHに保存されます。oawk
例の同義語awk
/usr/bin/nawk
はい、「新しい」バージョンはawk
1986年にSVR3.1で最初にリリースされました。 POSIXAwk
標準はこの実装に基づいています。/usr/xpg4/bin/awk
前者とほぼ同じですが、後者は正式にPOSIX適合性検証テストによって確認されます。/usr/gnu/bin/awk
、/usr/bin/gawk
またawk
。POSIXLY_CORRECT
環境で環境変数を設定したり、オプションを使用して呼び出すときは、ほとんどまたはすべてのPOSIX標準に準拠するように設計されていますが、-W posix
それ以外には独自の多くの特定の拡張機能が追加されます。それは拡張自体igawk
であり、最初はインクルードファイルをサポートし、2番目は分析をサポートします。pgawk
gawk
また見てくださいGNUawk
歴史章有用な情報をたくさん入手してください。
core-os
パッケージは通常のSolaris 11インストールにのみ存在することが保証されているため、oawk/awk
およびnawk
。特に、作成時に新しい非大域ゾーン、デフォルトでは次のものが含まれます。solaris-small-server
グループパッケージしたがって、xpg4
バイナリは使用できませんgnu
awk
。これは意図的に設計されています。このsolaris-small-server
グループは、アプリケーションが正しく機能するために必要なパッケージを追加できる最小限の開始点です。これは、大域ゾーンにインストールされているすべての項目が非大域ゾーンにもインストールされる以前の方法(Solaris 10)よりも安全で効率的であるため、ゾーンを最小限に抑えるために未使用のパッケージを削除する必要があります。
awk
これらの「小型サーバー」インストールで移植可能な方法でPOSIXサポートを受けるには、パッケージをインストールしてxcu4
PATHを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/awk
POSIX 準拠の失敗ではありません。 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