提取多行 -v 輸出中的版本號(hào))
Solidarity 版本探測原理指南line 與 matchIndex 如何精準(zhǔn)提取多行 -v 輸出中的版本號(hào)【免費(fèi)下載鏈接】solidaritySolidarity is an environment checker for project dependencies across multiple machines.項(xiàng)目地址: https://gitcode.com/gh_mirrors/so/solidaritySolidarity 是一款開源的項(xiàng)目依賴環(huán)境檢查工具它能在多臺(tái)機(jī)器上自動(dòng)校驗(yàn)命令行工具、環(huán)境變量、文件等依賴是否滿足要求。其中最有挑戰(zhàn)性的環(huán)節(jié)是版本號(hào)探測執(zhí)行-v后拿到的往往是多行、格式雜亂的輸出Solidarity 如何從中精準(zhǔn)提取正確的版本號(hào)本文將帶你快速讀懂line與matchIndex這兩個(gè)關(guān)鍵參數(shù)的設(shè)計(jì)原理。為什么 -v 輸出不能“拿來就用” 很多 CLI 工具執(zhí)行-v時(shí)會(huì)打印一大段信息甚至一行里出現(xiàn)多個(gè)版本react-native -v會(huì)同時(shí)輸出react-native-cli和react-native兩個(gè)版本號(hào)python --version把版本號(hào)輸出到stderr而不是 stdout部分工具的輸出版本號(hào)前還有構(gòu)建號(hào)、日期等“干擾項(xiàng)”如果簡單粗暴地取“第一個(gè)像版本的字符串”檢查的往往不是你真正關(guān)心的那個(gè)版本。Solidarity 的解決方案是一條三步流水線執(zhí)行命令 → 鎖定目標(biāo)行 → 選出目標(biāo)版本。第一步執(zhí)行版本命令getVersion入口在 getVersion.ts邏輯非常直白規(guī)則里指定了version屬性如version: --version就直接執(zhí)行它否則按-v→--version→-version→version的順序逐個(gè)嘗試直到拿到輸出stdout 為空時(shí)還會(huì)嘗試 stderr兼容 python、java 這類工具。拿到原始輸出后它把工作交給后兩步 第二步用 line 鎖定“目標(biāo)行”多行輸出的第一刀由 getLineWithVersion.ts 完成line屬性支持兩種寫法寫法行為類比數(shù)字如2取輸出的第 N 行“我要第 2 行”字符串如react-native:正則匹配包含該子串的第一行相當(dāng)于一次grep例如官方文檔 options.md 給出的例子react-native -v輸出兩行想用第二行的0.48.1寫line: 2或line: react-native:都可以。若規(guī)則沒寫line則默認(rèn)把整個(gè)輸出交給下一步處理。第三步用 matchIndex 選出“目標(biāo)版本”鎖定行之后removeNonVersionCharacters.ts 用一個(gè)正則掃描該行所有“形似版本”的片段x.y.z及后綴得到一個(gè)候選數(shù)組默認(rèn)取第一個(gè)matchIndex缺省為0若一行里有多個(gè)版本用matchIndex指定要第幾個(gè)。類型定義見 types.ts 中的CLIRule接口line為string | numbermatchIndex為number。測試用例 removeNonVersionCharacters.ts 演示得很清楚一行同時(shí)含1.3.5、2.1.0、3.1.4時(shí)matchIndex: 2就能精準(zhǔn)拿到3.1.4。組合技一個(gè)完整配置示例 把三步串起來在.solidarity文件里給 CLI 規(guī)則配上semver期望版本、line第幾行和matchIndex第幾個(gè)版本就能覆蓋絕大多數(shù)多行-v場景React Native: [{ rule: cli, binary: react-native, semver: ^0.48.1, line: 2 }]完整選項(xiàng)說明可參考 options.md規(guī)則格式校驗(yàn)可依據(jù)項(xiàng)目根目錄的 solidaritySchema.json。小結(jié)Solidarity 版本探測的精髓可以概括為getVersion多候選命令 stderr 兜底確保拿到原始輸出line數(shù)字取第 N 行字符串做 grep 式匹配把范圍縮小到一行matchIndex在一行多個(gè)版本中按序號(hào)精準(zhǔn)命中目標(biāo)。理解這條流水線后再遇到任何“版本輸出不規(guī)范”的工具你都能用這兩個(gè)參數(shù)把版本號(hào)穩(wěn)穩(wěn)地“摳”出來 ?【免費(fèi)下載鏈接】solidaritySolidarity is an environment checker for project dependencies across multiple machines.項(xiàng)目地址: https://gitcode.com/gh_mirrors/so/solidarity創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考