Clish中xml文件配置的使用方法

article/2025/7/28 16:49:14

1,引入

        之前介绍了klish的源码如何安装和使用,本次介绍一下klish的xml配置文件是如何使用的,介绍其中的<COMMAND>/<PARAM>/<PTYPE>等基础配置,方便以后查看。

2,clish中xml文件的基本语法

1,<OVERVIEW></OVERVIEW> : 定义当前clish,在首次进入时的帮助信息// 在clish的所以xml文件中只能出现一次使用
<OVERVIEW>1 - you can use something CMD by this CLI
</OVERVIEW>注上面定义的文字信息将被显示在clish首次运行,输入help命令显示2,<STARTUP ></STARTUP> : 定义clish启动的根视图和默认的ACTION处理脚本属性:view : 定义clish启动时显示/打开的根viewtimeout : 定义clish输入,不活跃时,超时退出(秒)default_shebang : 第一年默认的脚本处理程序: /bin/bash3,<DETAIL></DETAIL> : 定义首次进入clish时的titile内容上述两个配置一般联合使用在startup.xml中:
<OVERVIEW>1 - you can use something CMD by this CLI
</OVERVIEW>
<STARTUP view="root-view" timeout="30" default_shebang="/bin/sh"><DETAIL>***************************************   welcom to login CLI in ROUTER***************************************</DETAIL><ACTION>echo "Welcome `uname -n` it is `date`"</ACTION>
</STARTUP>
4, <VIEW></VIEW> : 定义命令的视图,基本上所以的命令都应该包含在其内部,如果<COMMAND>不包括在任意视图,那么该命令将被挂载到root视图下属性:name :定义视图名称(唯一)prompt : 定义进入该视图后shell首端提示,类似于:shell中每行会的显示信息depth : 定义视图的深度,与 <CONFIG>配合,达成命令输入的顺序的配置restore: none - 不更改当前视图。view - 当前视图将设置为命令的本机视图。depth - Klish 引擎将找出命令本机视图的深度。然后,它将在当前嵌套视图堆栈中搜索此深度。当前视图将设置为堆栈中保存的视图,其深度等于命令的深度。此外,上下文(“viewid”值)将从堆栈中恢复,默认值:noneaccess: 定义可以接受的权限String ,设置访问权限,admin:super:root,真正的功能通过HOOK标签实现使用:
<VIEW name="enable-view"><COMMAND name="show interfaces"help="Interface status and configuration"><ACTION>ip addr show</ACTION></COMMAND><COMMAND name="show ip interface"help="IP interface status and configuration"><ACTION>ip addr show</ACTION></COMMAND></VIEW>
<VIEW name="network-terminal-view" prompt="network>" depth="1"><!-- TODO: -->
</VIEW>
5, <COMMAND></COMMAND> : 定义一个clish命令的模块,一个VIEW中可以多个,并且可以嵌套可使用的属性:name: 定义命令的名字,即我们输入的命令名称help: 定义命令的帮助信息,当我们Tab h或输入 '?'时,显示lock: BOOL(true/false),定义当前命令,在多个clish实例时是否可以被同时运行interrupt : BOOL(true/false),定义当前命令运行时,是否可以被Ctrl + c终止view: 定义输入当前命令后,可以进入的视图(视图跳转)viewid: 定义进入另一个视图的id,即可以传递一个变量(后面介绍)一般用法:<COMMAND name="config" help="Enter configure mode"/> <COMMAND name="config terminal"help="config from the terminal"view="network-config-view"viewid="iface=index"></COMMAND>
或者<COMMAND name="port" help="network port config" lock="false" interrupt="true" view="network-port-view" viewid="s_index=${s_index}"><PARAM name="s_index" help="config port index[0..n]" ptype="UINT"/><ACTION>echo "------>"</ACTION></COMMAND>
6, <PARAM></PARAM> : 标识命令所带的参数,与COMMAND配合使用属性:name : 参数的名称help : 参数的帮助信息optional : 参数是否可选,(true: 参数可不输入,false:参数必填)mode :switch - 开关选项switch 子命令是一个容器,允许选择唯一的一个子参数进行进一步分析subcommand - 子命令,由PTYPE定义,默认是字符串类型common - 普通参数的标准模式。没什么特别的。默认值ptype : 定义的参数类型,有PTYPE定义order : 带有order=”true”字段的参数,被输入后,会截断所以的可选参数,即不能再输入其他可选参数了view :引用某个视图value : “name” 字段是内部变量的名称。“value”是一个可显示的子命令名称。它允许复制可显示的子命        令名称。Value字段强制PARAM为subcommand.hidden: 参数的可见性 ,BOOL使用:
<COMMAND name="ping"help="Send messages to network hosts"lock="false"interrupt="true"><PARAM name="proto"help="Protocol to use for the ping"optional="true"mode="switch"ptype="SUBCOMMAND"><PARAM name="ip"help="Send ICMP IPv4 messages to network hosts (default)"mode="subcommand"ptype="SUBCOMMAND"/><PARAM name="ipv6"help="Send ICMP IPv6 messages to network hosts"mode="subcommand"ptype="SUBCOMMAND"/><PARAM name="arp"help="Send ARP requests to a neighbour host"mode="subcommand"ptype="SUBCOMMAND"/></PARAM><PARAM name="dst"help="Hostname or IP-address to ping"ptype="STRING"/>
</COMMAND>
7, <PTYPE></PTYPE>  :定义参数的类型属性name : 该字段可以在<PARAM>中的ptype字段使用,名称help : 参数的帮助信息pattern : 通常定义该类型语法的正则表达式method :解释 “pattern” 属性的方法,regexp : 默认的是一个POSIX的正则表达式interger : 数字定义,“min..max”select: 参数可选则,
如:<PTYPE name="IPTYPE"method="select"pattern="ipv4(ipv4) ipv6(ipv6) all(all)"help="Protocol choice ipv4/ipv6/all"/>preprocess: 预处理none - 不做任何动作(default)toupper : 验证前转换为大写tolower : 验证前转小写使用:<PTYPE name="SUBCOMMAND"pattern="[^\]+"help="String"/><PTYPE name="STRING_SIZE32"pattern="^[a-zA-Z0-9:/@\.]{0,32}$"help="string(len 32) "/>
8,<ACTION></ACTION> : 输入命令后的执行动作属性:shebang : 默认的处理动作builtin :内置函数clish_close : 关闭当前clishclish_nop : 什么也不做,clish_nested_up : 视图嵌套,当我们在视图移动时,引擎保存之前的状态,当遇到这个动作时,将回退到前一个状态,如果当前的深度为0,即根VIEW,并且遇到了这个动作,则clish将退出用法:<COMMAND name="show ip interface"help="IP interface status and configuration"><ACTION>ip addr show</ACTION></COMMAND><COMMAND name="exit_up"help="Exit from the CLI in configure"lock="false" interrupt="true"><ACTION builtin="clish_nested_up"/>
</COMMAND>
9. <NAMESPACE></NAMESPACE> :命名空间,视图嵌套此标记可以在 [VIEW] 元素的范围内使用。NAMESPACE 标签允许将命令集从指定视图导入到另一个视图中ref : 引用要从中导入的VIEW,即引用某个视图中的命令
prefix : 导入命令的文本前缀 (所有命令将带上这个前缀)
prefix_help : 当用户已经输入 prefix 但尚未输入命令名称时,将打印它
inherit : 是否递归继承嵌套命名空间命令的布尔标志
completion : 允许是否使用Tab建使用方法:<!-- network 命令测试 --><NAMESPACE ref="network-view"help="true"completion="true"/> 

 以上介绍了klish中的xml的标签的使用,在action标签中还可使用如下脚本指令(类似于shell),需要配合test使用

 

3,总结

        本文介绍了Clish中,xml的一下标签的使用,clish读取xml文件,生成cmd树,一个基本的xml命令文件,包括VIEW / COMMAND/PARAM/ACTION/PTYPE等。

目前已知的一些东西:

        ① ${SYSTEM_NAME} 可为环境变量值,即clish可以读取环境变量,使用${xxx}显示

        ② 在一个VIEW中,可局部定义<PTYPE>,保证参数的输入内心检测和全局的不冲突

        ③ <COMMADN>中name字段可以有空格,如name="show " 和 name="show port",联合使用的命令输入为: show port

        ④ 输入参数时带空格,应这样"4 6t" 输入

        ⑤ NAMESPACE表示把其他VIEW下的视图直接拷贝过来,视图不会被切换,而命令中的VIEW,表示去到另外的视图下操作了,此时视图被切换。

        ⑥ 在viewid中定义的”index=${s_index}“,在切换到另外视图时index可当变量使用其值为${s_index}.

        7, ACTION的动作是先于<COMMAND>中的VIEW属性的。

具体的使用可参考源码中的例子。


http://www.hkcw.cn/article/kFGikbtkaP.shtml

相关文章

Compose仿微信底部导航栏NavigationBar :底部导航控制滑动并移动

文章目录 1、准备工作1.1 参考1.2 依赖添加&#xff1a;1.3 主要控件NavigationBarHorizontalPager、VerticalPager 2、功能描述&#xff1a;3、实现过程3.1 创建一个数据类3.2 创建一个list变量3.3 具体实现3.3.1 创建共享的Pager状态3.3.2 将页面索引与页面标题同步3.3.3 创建…

由反汇编代码确定结构体的完整声明

C程序中遇到下面的代码 typedef struct {int left;a_struct a[CNT];int right; } b_struct;void test( int i, b_struct *bp) {int nbp->leftbp->right;a_struct *ap&bp->a[i];ap->x[ap->idx]n; } 下面是test函数的反汇编代码 结合C程序中的代码与test函数…

生成式人工智能:重塑社会的双刃剑与人类文明的抉择

普罗米修斯之火与文明的抉择 当古希腊神话中的普罗米修斯盗取天火赠予人间时&#xff0c;人类文明开启了从蒙昧走向理性的征程。今天&#xff0c;生成式人工智能&#xff08;GenAI&#xff09;正以类似的方式重塑人类认知的边界——它既是照亮未来的火炬&#xff0c;也是可能灼…

TestHubo V1.1.0版本发布,新增用例评审功能,确保测试用例质量,提升测试用例覆盖率

TestHubo是一款开源免费的测试管理工具&#xff0c;提供一站式测试解决方案&#xff0c;涵盖功能测试、接口测试、性能测试以及 Web 和 App 测试等多个维度。本周TestHubo V1.1.0版本发布&#xff0c;新增用例评审功能。 1、版本更新日志 新增 ➢ 用例评审&#xff1a;通过评…

正点原子Z15I ZYNQ 开发板发布!板载PCIe2.0、SPFx2、MIPI CSI等接口,资料丰富!

正点原子Z15I ZYNQ 开发板发布&#xff01;板载PCIe2.0、SPFx2、MIPI CSI等接口&#xff0c;资料丰富&#xff01; 正点原子Z15I ZYNQ开发板&#xff0c;核心板全工业级设计&#xff0c;主控芯片的型号是XC7Z015CLG485-2I。开发板由核心板&#xff0b;底板组成&#xff0c;外设…

易路 iBuilder:解构企业 AI 落地困境,重构智能体时代生产力范式

一、从大模型到智能体的产业跃迁 2024 年堪称中国人工智能产业的 "战略拐点" 之年。当 DeepSeek R1 模型以 "技术 价格" 双重普惠模式掀起行业震荡时&#xff0c;各企业纷纷意识到&#xff0c;大模型的真正价值不在于技术炫技&#xff0c;而在于成为企业…

DiTAR: Diffusion Transformer Autoregressive Modeling for Speech Generation

kaiming 文章的codepaper abstract LLM 预测连续embedding&#xff0c;直接接DiT。和kaiming-Autoregressive Image Generation without Vector Quantization的文章思路一样。- LLM是casual attention&#xff0c;和diffusion 一起训练&#xff0c;相比于full attention会有性…

AC220V整流滤波电路Multisim仿真

一、仿真电路&#xff1a; 二、遇到的问题 1、仿真运行保险丝会熔断&#xff0c;然后输出电压不对。 解&#xff1a;这里可能是整流桥的模型不对&#xff0c;更换了一个新的模型&#xff0c;仿真就可以正常运行了。 2、整流桥的电流方向和问题 正半周&#xff1a; 负半周&a…

【后端高阶面经:架构篇】50、数据存储架构:如何改善系统的数据存储能力?

一、数据存储架构设计核心原则 (一)分层存储架构:让数据各得其所 根据数据访问频率和价值,将数据划分为热、温、冷三层,匹配不同存储介质,实现性能与成本的平衡。 热数据层:访问频率>100次/秒。采用Redis集群存储高频访问数据(如用户登录态、实时交易数据),配合…

安卓逆向篇Smail 语法反编译签名重打包Activity 周期Hook 模块

常见安卓逆向工具及环境&#xff1a; 1 、安卓模拟器&#xff08;最好 root 的真机&#xff09; 2 、 Magisk&XP&LSP 框架 HOOK 环境 安装参考&#xff1a; https://blog.csdn.net/danran550/article/details/132256027 3 、 Jadx-Gui 反编译 Java 代码查看…

AWS云创建安全审计用户组

目标 创建一个安全审计的用户组。 解决

拉深工艺模块——回转体拉深件毛坯尺寸的确定(一)

回转体拉深件毛坯尺寸的确定 一、 坯料形状和尺寸确定的依据 体积不变原则&#xff1a;若拉深前后料厚不变&#xff08;体积表面积厚度&#xff09;&#xff0c;拉伸前坯料表面积与拉伸后冲件表面积近似相等&#xff0c;得到坯料尺寸。 相似原则&#xff1a;拉深前坯料的形状…

最佳实践|互联网行业软件供应链安全建设的SCA纵深实践方案

在数字化转型的浪潮中&#xff0c;开源组件已成为企业构建云服务与应用的基石&#xff0c;但其引入的安全风险也日益凸显。某互联网大厂的核心安全研究团队&#xff0c;通过深度应用软件成分分析&#xff08;SCA&#xff09;技术&#xff0c;构建了一套覆盖开源组件全生命周期管…

【软件安装那些事 3 】CAD(2026 V60.7z) 安装教程(中文简体版)步骤完整不跳步 { 附软件提取下载链接,永久有效---------百度网盘 }

通过网盘分享的文件&#xff1a;CAD2026 V60.7z 安装包 中文 &#xff08;永久有效&#xff09; 链接: https://pan.baidu.com/s/122UXbOK9iGsD5Ld-lzrfAA?pwdneqd 提取码: neqd 1、解压完成后&#xff0c;打开【Setup】文件夹 2、鼠标右击【Setup】…

智能柜I立控信息I产品介绍

在数字化浪潮席卷各行各业的今天&#xff0c;智能存储解决方案正成为企业提升运营效率、优化资产管理的重要工具。LKONE品牌推出的智能柜产品&#xff0c;凭借其创新的技术配置和人性化的功能设计&#xff0c;为用户带来了全新的智能存储体验。 一、特殊勤务单位装备管理面临的…

特伦斯 S75 电钢琴:奏响音乐新时代的华章

当今音乐市场中&#xff0c;电钢琴领域蓬勃发展。随着生活水平提升和音乐教育普及&#xff0c;它成众多音乐爱好者与家庭的首选。当下电钢琴市场走向显著&#xff0c;技术创新、消费升级推动发展&#xff0c;应用场景不断拓展&#xff0c;日益多元化。 在这样的市场大环境下&a…

【Linux】权限相关指令

前言&#xff1a; 上两篇文章我们讲到了&#xff0c;关于Linux中的基础指令。 【Linux】初见&#xff0c;基础指令-CSDN博客【Linux】初见&#xff0c;基础指令-CSDN博客 本文我们来讲Linux中关于权限中的一些指令 shell命令 Linux严格来说是一个操作系统&#xff0c;我们称之…

day14 leetcode-hot100-26(链表5)

142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 1.哈希表 思路 与上一个一模一样&#xff0c;基本上没有区别&#xff0c;就是寻找是否存储过该节点。具体思路如下 day14 leetcode-hot100-25&#xff08;链表4&#xff09;-CSDN博客 具体代码 /*** Definition…

新能源汽车与油车销量

中国油车与新能源车销量对比&#xff08;2022-2025年&#xff09; ‌1. 市场份额演化&#xff08;2022-2025年&#xff09;‌ ‌年份‌ ‌新能源车销量 &#xff08;渗透率&#xff09;‌ ‌燃油车销量 &#xff08;渗透率&#xff09;‌ ‌关键事件‌ ‌2022‌ 688.7万辆…

大语言模型 23 - MCP 自动操作 自动进行联网检索 扩展MCP能力

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇&#xff1a; MyBatis 更新完毕目前开始更新 Spring&#xff0c;一起深入浅出&#xff01; 大数据篇 300&#xff1a; Hadoop&…