Jenkins执行shell调用polyspace-access时如何仅提取RUN_ID数值
提取Polyspace命令输出中RUN_ID数值的方法
直接用反引号捕获命令全量输出时,会把命令执行过程中打印的所有连接日志、提示信息都存入变量,只需要在原命令后追加文本过滤逻辑,即可精准提取RUN_ID对应的数字,以下两种写法都可直接在Jenkins「执行shell」步骤中使用:
方法1:awk匹配提取(最简洁)
定位输出中包含RUN_ID的行,直接取该行最后一个字段(也就是RUN_ID对应的数值):export RunID=$(polyspace-access -list-project XX/YY -host MyHost -protocol http -login MyUsername -encrypted-password MyPassword | awk '/RUN_ID/{print $NF}') echo "This is my RunID: $RunID"方法2:sed正则提取(兼容性更强)
通过正则精准匹配RUN_ID后的数字段,哪怕该行后续还有其他输出内容也不会提取错误:export RunID=$(polyspace-access -list-project XX/YY -host MyHost -protocol http -login MyUsername -encrypted-password MyPassword | sed -n 's/.*RUN_ID \([0-9]\+\).*/\1/p') echo "This is my RunID: $RunID"
补充说明:
- 建议在shell脚本中用
$()代替反引号`做命令替换,可读性更好,嵌套复杂逻辑时也不容易出现转义错误。- 如果执行过程中的连接类日志是输出到标准错误流的,可以在polyspace-access命令后追加
2>/dev/null丢弃错误流日志,避免无关内容干扰匹配,示例:export RunID=$(polyspace-access -list-project XX/YY -host MyHost -protocol http -login MyUsername -encrypted-password MyPassword 2>/dev/null | awk '/RUN_ID/{print $NF}')
内容的提问来源于stack exchange,提问作者user3122648
相关产品推荐
相关产品推荐

