SMIT 情報コマンド・ディスクリプター
システム管理インターフェース・ツール (SMIT) は、そのオブジェクト内に定義されている いくつかのディスクリプターを使用して、現在の実行時間値などの、SMIT インターフェース構造体を通して 続行するために必要な情報を取得することができます。
これらのディスクリプターにはそれぞれ、何らかの形式のコマンド文字列が割り当てられ、 実行および必要なデータの検索が行われます。
必要な情報を見つけるためにコマンドに設定できるディスクリプターは、次のとおりです。
- cmd_to_discover ディスクリプター。 ダイアログ・ヘッダーを定義する際に使用される sm_cmd_hdr オブジェクト・クラスの一部です。
- cmd_to_classify ディスクリプター。 セレクター・ヘッダーを定義する際に使用される sm_name_hdr オブジェクト・クラスの一部です。
- cmd_to_list ディスクリプター。 ダイアログ入力フィールドに関連したセレクターまたはダイアログのコマンド・オプション・リストに関連するセレクター・オプション・リストを定義する際に使用される sm_cmd_opt オブジェクト・クラスの一部です。
SMIT は、最初に子プロセスを作成することに よって、cmd_to_list、cmd_to_classify、 または cmd_to_discover ディスクリプターで指定されたコマンド文字列を実行します。 子プロセスの標準エラー (strerr) と標準出力は、パイプを経由して SMIT にリダイレクトされます。 次に SMIT は、子プロセス内の setenv("ENV=") サブルーチンを実行して、 ユーザーの $HOME/.env ファイルで指定されているコマンドが、 新規シェルの起動時に自動的に実行されることのないようにします。 最後に SMIT は、execl システム・サブルーチンをコールし、 コマンド文字列を ksh -c パラメーター値として使用して新規 ksh シェルを始動します。 終了値が 0 でない場合、SMIT はそのコマンドが失敗したことをユーザーに通知します。
SMIT は、ログ・ファイルのパス名とコマンド・ライン verbose、trace、および debug のフラグの設定を、実行するコマンドのシェル環境で使用できるようにします。 これらの値は、次の環境変数を介して提供されます。
- _SMIT_LOG_FILE
- _SMIT_SCRIPT_FILE
- _SMIT_VERBOSE_FLAG
- _SMIT_TRACE_FLAG
- _SMIT_DEBUG_FLAG
対応するフラグが存在するか否かは、それぞれ 0 または 1 という値で示されます。
現在の設定を表示する簡単な方法は、SMIT の始動後にシェル機能を起動してから、コマンド文字列 env | grep _SMIT を実行することです。
ログ・ファイルへの書き込みはすべて付録として行い、その書き込みが 自動的に行われるのでないかぎり、書き込みの直後にフラッシュを行う必要があります。
cmd_to_discover ディスクリプター
SMIT は、ダイアログを立ち上げると、sm_cmd_hdr (ダイアログ・ヘッダー) オブジェクトと、 関連するダイアログのボディ (1 つまたは複数の sm_cmd_opt オブジェクト) を オブジェクト・リポジトリーから取得します。 ただし、sm_cmd_opt オブジェクトは、現在の実行時間値を用いて 初期化することもできます。 sm_cmd_hdr.cmd_to_discover フィールドが空 ("") でない場合、SMIT はこのフィールドで指定されたコマンドを実行して、現在の実行時間値を取得します。
有効な任意の ksh コマンド文字列を、cmd_to_discover ディスクリプター値として使用できます。 コマンドは、その標準出力として以下の出力フォーマットを生成する必要があります。
#name_1:name_2: ... :name_n¥n
value_1:value_2: ... :value_n
コマンドの標準出力において、先頭文字は必ず # (ポンド記号) です。 ¥n (改行文字) は、名前の行と値の行を分離するために常に存在します。 複数の名前および値は、: (コロン) で区切ります。 さらに、どの名前や値も空文字列 (出力フォーマットでは、間にスペースが入らない 2 つのコロン として表示される) にすることができます。 SMIT は、ある画面から次の画面へ名前と値の対を渡す際に使用する、 このフォーマットでの内部現行値設定を保守します。
注: 値に : (コロン) が付いている場合、 その : の前に #! (ポンド記号、感嘆符) が 付いている必要があります。 さもないと、SMIT は : (コロン) を フィールドのセパレーターとして読み取ります。
SMIT は cmd_to_discover フィールドで指定されたコマンドを実行すると、コマンドの stdout をキャプチャーし、各名前と sm_cmd_opt オブジェクトの sm_cmd_opt.disc_field_name ディスクリプターとを突き合わせることによって、これらの名前と値の対 (name_1 と value_1、 name_2 と value_2、等々) を sm_cmd_opt (ダイアログ・コマンド・オプション) オブジェクトの disp_values および aix_values の各ディスクリプターにロードします。
前のセレクターからの値を表示する sm_cmd_opt (ダイアログ・コマンド・オプション) オブジェクト の場合、このダイアログ・コマンド・オプション・オブジェクトの disc_field_name ディスクリプター を、"_rawname" または "_cookedname" (あるいは、 デフォルト名を指定変更するために使用された代替名) に設定して、どの値を使用するのかを 示す必要があります。 この場合、sm_cmd_opt (ダイアログ・コマンド・オプション) オブジェクト の disc_field_name ディスクリプターは、通常、非入力フィールドにする必要があります。 コマンドに常に特定の値を渡す必要がある場合は、sm_cmd_opt (ダイアログ・コマンド・オプション) オブジェクトの required ディスクリプターを y (yes) に設定するか、または他の代替値のいずれかに設定する必要があります。
特殊な場合のオプション・リング・フィールド初期化では、リング入力フィールド の cmd_to_discover ディスクリプターに対する現行値 (すなわち、ダイアログの 現行値セット内の任意の名前と値の対) で、デフォルトあるいは該当する入力フィールドに 対する初期値として使用する事前定義済みのリング値を指定することが認められています。 ダイアログの初期化時に、ダイアログの入力フィールドがダイアログの現行値セット内の名前と 一致している (sm_cmd_opt.disc_field_name を介して) と、 それがオプション・リング・フィールドである (sm_cmd_opt.op_type = "r") かどうか、 また、それに事前定義済みのリング値 (sm_cmd_opt.aix_values != "") があるか どうかを判別するための検査が行われます。 このような場合、このオプション・リングの値のセットが、現行値セットから 得た disc_field_name に対する現行値と比べられます。 一致するものがあると、その一致したオプション・リング値がデフォルトのリング値に なります (sm_cmd_opt.value_index がその索引に設定されます)。 該当する変換済み値 (sm_cmd_opt.disp_values) が使用可能であれば、その値が表示されます。 一致するものが検出されなかった場合は、エラーが報告され、現行値が そのリングに対するデフォルト、かつ唯一の値となります。
多くの場合、ディスカバリー・コマンドが既に存在しています。 デバイスおよびストレージ領域に、追加、除去、変更、および表示の汎用パラダイムがあります。 例えば、追加する (mk) 場合、 特性を請求するためにダイアログが必要です。 ダイアログは、ディスカバリー・コマンドとして、デフォルト値を要求する パラメーターを指定した表示 (ls) コマンドを持つことができます。 SMIT は表示 (ls) コマンドの標準出力を使用して、提示されたデフォルトに充てんします。 ただし、開発時に認識される (つまり、指定されたマシンの現在の状態を基にしているわけではない) 定数であるデフォルト値を持つオブジェクトの場合、デフォルトはダイアログ・レコード自体で初期化することができます。 この場合、cmd_to_discover は必要ありません。 その後、ダイアログが表示されます。 すべてのフィールドへの入力が終わり、ダイアログがコミットされると、 追加 (mk) コマンドが実行されます。
その他の例として、変更 (ch) ダイアログは、 そのディスカバリー・コマンドとして、特定のデバイスなどの指定されたインスタンスに対する 現行値を得る表示 (ls) コマンドがあります。 SMIT は表示 (ls) コマンドの標準出力を使用して、 ダイアログを表示する前に値の入力を行います。 ここでディスカバリー用に使用される表示 (ls) コマンドは、 オプションの設定に若干の違いがありますが、追加 (mk) の例での ディスカバリー用に使用される表示コマンドと同じで構いません。
cmd_to_*_postfix ディスクリプター
cmd_to_discover、cmd_to_classify、または cmd_to_list ディスクリプターの各出現に関連しているのは、cmd_to_discover、cmd_to_classify、または cmd_to_list ディスクリプターによって定義されているコマンド文字列に対する接尾部を定義する 2 番目のディスクリプターです。 接尾部は、コマンドの実行前にコマンドに追加されるフラグおよびパラメーターを 定義している文字列です。
コマンドに追加する接尾部を定義するために使用できるディスクリプターは、次のとおりです。
- cmd_to_discover_postfix ディスクリプター。 ダイアログ・ヘッダーを定義している sm_cmd_hdr オブジェクト内の cmd_to_discover ディスクリプターに対する接尾部を定義します。
- cmd_to_classify_postfix ディスクリプター。 セレクター・ヘッダーを定義している sm_name_hdr オブジェクト内 の cmd_to_classify ディスクリプターに対する接尾部を定義します。
- cmd_to_list_postfix ディスクリプター。 ダイアログに関連したセレクターまたはダイアログの入力フィールドに関連した セレクター入力フィールドを定義している sm_cmd_opt オブジェクト内 の cmd_to_list ディスクリプターに対する接尾部を定義します。
次の例は、接尾部ディスクリプターを使用してパラメーター・フラグおよび値を指定する方法です。 例の中の * (アスタリスク) は、list、classify、 または discover のいずれでも構いません。
cmd_to_* は "DEMO -a" に等しく、cmd_to_*_postfix は "-l _rawname -n stuff -R _cookedname" に等しく、現行値のセットが次のとおりであると想定します。
#name1:_rawname:_cookedname::stuff¥n
value1:gigatronicundulator:parallel:xxx:47
この場合、作成されるコマンド文字列は、次のようになります。
DEMO -a -l 'gigatronicundulator' -n '47' -R 'parallel'
取り囲む '' (単一引用符) を接尾部ディスクリプターの 値の周囲に追加すると、組み込みスペースを用いたパラメーター値の処理が許可されます。