Solaris: PKG - 一部のパッケージを除くすべてのパッケージを確認するスクリプト

Solaris: PKG - 一部のパッケージを除くすべてのパッケージを確認するスクリプト

既知の理由で失敗すると予想される定義済みパッケージのリストを除くすべてのパッケージを検証しようとしています。このスクリプトは、システム基準を確認するために、環境内のすべてのSolarisシステムで実行されます。

私はこれのために働くすべての技術にオープンであり、1行に置くことができます(検証に使用するツールの制限)。

私の最初のアイデアは、pkgリストを取得し、それをAWKを介して実行してパッケージ名を取得し、不要なパッケージをフィルタリングし、残りのパッケージごとに個別に別々のpkgチェックを実行することでした。

以下に私が作成したコードは次のとおりです。

pkg list | awk 'BEGIN {c=0} $1 == "exclude1" || $1 == "exclude2" { next } { system("pkg verify " $1); c++ } END { if (c == 0) print "none" }'

私が経験している問題は、pkgの検証に失敗することがあることを知っているにもかかわらず、出力が表示されないことです。

私はsystem(この出力をキャプチャすると思いましたが、私はAWKを比較的初めて知り、何かを間違って理解しているかもしれません)。

ベストアンサー1

nawkSolaris 11.3では、デフォルトインストールの代わりにawknawk( "new ")を使用しようとしており、awkこれはパス(/usr/bin/nawk)になければなりません。

system()awk(すべての実装)の関数は、コマンドの出力を返さずに終了コードを返します。でも大丈夫です。おそらく実際の出力を望まないからですpkg。問題が発生すると、pkgコマンドはゼロ以外の終了コードで終了します(マニュアルを参照pkg)。

次のパイプラインはpkg list出力を取得し、最初の行(ヘッダー)と除外されたパッケージ名と一致するすべての行をスキップします。残りの入力行はpkg verifyパッケージ名を使用して実行されます。system()

pkg verify0以外の終了ステータスが返されると、カウンタがインクリメントされます。処理が終了すると、発生した検証エラーの数を示すカウンタが表示されます。

pkg list | nawk 'NR > 1 && !/exclude1|exclude2/ { if (system("pkg verify " $1)) { e++ } } END { printf("%d errors\n", e) }'

しかし、これはかなり非効率的です。パッケージのリストを取得し、一度にすべてを確認する方が高速です。

pkg list | nawk 'NR > 1 && !/exclude1|exclude2/ { print $1 }' | ( xargs pkg verify ) || echo "there were errors"

ファイルに無視するパッケージのリストがある場合:

pkg list | /usr/xpg4/bin/grep -F -v -f excluded.txt | nawk 'NR > 1 { print }' | ( xargs pkg verify ) || echo "there were errors"

おすすめ記事