You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CLI中解析Bash脚本输出并提取Xcode测试结果文件路径

提取Xcode测试结果文件路径的正确方法

看起来你的脚本在捕获xcresult路径时犯了两个关键错误:一是变量赋值的管道写法逻辑不对,二是用cut命令无法获取目标行的下一行内容。咱们一步步来修正:

问题分析

你的原代码里这一行逻辑完全错误:

variable=RatioUITest.sh | grep 'Test session results, code coverage, and logs:'|cut -f2 -d 'T'

这里你不是在处理xcodebuild的输出,而是把字符串RatioUITest.sh赋值给变量后试图管道,根本得不到测试输出的内容。而且cut是切割当前行的文本,但你需要的是目标提示行的下一行的完整路径,这显然不是cut能完成的工作。

解决方案

我们需要先捕获xcodebuild的输出,然后定位到目标行,再提取它的下一行。下面是几种可靠的实现方式:

方式1:用grep + tail 获取下一行

这种方式最直观,先用grep找到目标行并带出下一行,再用tail只保留路径行:

#!/bin/bash
echo Running RatiosUITests

# 捕获xcodebuild的输出,同时保留终端打印(可选,想看到完整测试输出就保留)
xc_output=$(xcodebuild \
test \
-project Ratios.xcodeproj \
-scheme RatiosUITests \
-destination 'platform=iOS Simulator,name=iPhone 13 mini')

# 从输出中提取目标路径
result_path=$(echo "$xc_output" | grep -A1 'Test session results, code coverage, and logs:' | tail -n1)

echo "测试结果路径:$result_path"
  • grep -A1表示匹配目标行后,额外输出后面1行内容
  • tail -n1只保留这额外的一行,也就是我们要的xcresult路径

方式2:用sed直接定位并提取

sed可以直接定位到包含目标文本的行,然后跳转到下一行输出:

result_path=$(echo "$xc_output" | sed -n '/Test session results, code coverage, and logs:/{n;p}')
  • -n表示只输出我们指定的内容
  • /目标文本/{n;p}:找到匹配的行后,n跳转到下一行,p打印该行内容

方式3:用awk处理(更灵活)

awk适合复杂文本处理,这里可以直接匹配目标行,然后读取并打印下一行:

result_path=$(echo "$xc_output" | awk '/Test session results, code coverage, and logs:/{getline; print}')
  • getline会读取下一行的内容,然后print输出它

完整可运行脚本

把上面的逻辑整合到你的脚本里,最终版本如下:

#!/bin/bash
echo Running RatiosUITests

# 执行测试并捕获所有输出(包括错误信息)
xc_output=$(xcodebuild \
test \
-project Ratios.xcodeproj \
-scheme RatiosUITests \
-destination 'platform=iOS Simulator,name=iPhone 13 mini' 2>&1)

# 提取结果路径(这里用sed的方式,你可以换成上面任意一种)
result_path=$(echo "$xc_output" | sed -n '/Test session results, code coverage, and logs:/{n;p}')

# 打印或后续使用路径
echo "获取到的测试结果路径:$result_path"
# 示例:用xcrun处理结果文件
# xcrun xcresulttool get --path "$result_path"

注意加上2>&1是为了把标准错误输出也捕获进来,确保不会漏掉任何可能包含路径的内容。

内容的提问来源于stack exchange,提问作者Данил Кокин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:07:26