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 文件中指定的命令在新 shell 被调用时自动运行。 最后,SMIT 调用execl系统子程序启动一个新的kshshell,使用命令字符串作为ksh -c参数值。 如果退出值不为 0,SMIT 将通知用户该命令 失败。
SMIT 使日志文件的路径名和命令行详细、跟踪和调试标记的设置 在其运行的命令的 shell 环境中可用。 这些值是通过以下环境变量提供的:
- SMIT_LOG_FILE
- _ SMIT_SCRIPT_FILE
- _SMIT_VERBOSE_FLAG
- _SMIT_TRACE_FLAG
- _SMIT_DEBUG_FLAG
对应标记的出现或缺乏分别由值 0 或 1 指示。
查看当前设置的简便方法就是在启动 SMIT 后调用 shell 函数,然后运行命令字符串 env | grep _SMIT。
对日志文件的所有编写应该在追加时执行,然后立即执行 对齐操作,除非该操作已自动进行。
cmd_to_discover 描述符
SMIT 建立对话框时,它从对象库获取 sm_cmd_hdr(对话框标题)对象及其相关对话框主题(一个或多个 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在命令的标准输出中,第一个字符始终是#(井号)。 A\n(换行符) 始终存在以将名称行与值行分隔开。 多个名称和值由以下各项分隔::(冒号)。 任何的名称或值均可以是空字 符串(它在输出格式中显示为两个冒号,这两个冒号之间无空格)。 SMIT 将内部当 前值集合的格式维持在将名称值对从一个屏幕传递给下一个屏幕时所使用的格式。
注: 如果值包含:(冒号) , : 必须以#!(井号,惊叹号)。 否则, SMIT 将读取:(冒号) 作为字段分隔符。
当 SMIT 运行在cmd_to_discover字段,它捕获stdout并装入这些 "名称/值" 对 (name_1和value_1 name_2和value_2(依此类推) 通过将每个名称与每个 sm_cmd_opt 对象中的 sm_cmd_opt.disc_field_name 描述符匹配,将 sm_cmd_opt (对话命令选项) 对象的 disp_values 和 aix_values 描述符。
对于显示来自先前选择器的值的 sm_cmd_opt (对话命令选项) 对象,必须将对话命令选项对象的 disc_field_name 描述符设置为"_rawname"或"_cookedname"(或用于覆盖缺省名称的任何备用名称) 以指示要使用的值。 在此情况下,sm_cmd_opt(对话框命令选项)对象的 disc_field_name 描述符通常应该是非输入字段。 如果应该始终将特定值传递到命令,那么必须将 sm_cmd_opt (对话命令选项) 对象的 必需 描述符设置为y(是) ,或其他替代方法之一。
选项环字段初始化的特殊情况允许环输入字段的 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 描述 符定义的命令字符串的后缀。 后缀即定义在执行命令前追加到该命令的标记和参数的字符串。
可用于向命令定义将要追加的后缀的描述符为:
- 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'周围''可以在后缀描述符值周围添加 (单引号) ,以允许使用嵌入的空格来处理参数值。