klish 1.7.1使用内部VAR设置STARTUP标签timeout不生效问题咨询
根因说明
klish 1.7.1版本中clish_shell__set_timeout函数的是未解析的字符串,因此超时配置失效。
解决方案
方案1:修改源码适配(支持自定义编译klish场景)
改动clish/shell/clish_shell.c中STARTUP标签的解析逻辑,将timeout属性的赋值时机延后到动态VAR全部求值完成后:
- 移除XML解析阶段对STARTUP timeout属性的直接赋值逻辑
- 在所有VAR加载求值完成、STARTUP的ACTION执行前,手动读取timeout属性值,调用
konf_var_subst接口完成变量替换,再传入clish_shell__set_timeout设置即可。
该改动代码量很小,1.7.1版本仅需增加3行左右的逻辑即可实现需求。
方案2:无源码修改的替代实现(不可修改klish源码场景)
去掉STARTUP标签上的timeout属性配置,改在STARTUP的ACTION块末尾调用超时设置逻辑实现动态配置,示例配置如下:
<VAR name="IDLE_TIMEOUT" help="idle timeout value" dynamic="true"> <ACTION> echo -n "60" </ACTION> </VAR> <STARTUP view="myview"> <ACTION> cat /etc/banner # 此时动态VAR已完成求值,变量可正常替换 clish_set_timeout ${IDLE_TIMEOUT} </ACTION> </STARTUP>
若当前klish环境无内置
clish_set_timeout命令,可新增自定义COMMAND,在COMMAND的ACTION中调用C扩展或直接调用clish_shell__set_timeout接口实现超时设置,COMMAND执行阶段动态VAR已经完成全部求值,变量可正常解析。
内容的提问来源于stack exchange,提问作者neoben
相关产品推荐
相关产品推荐

