Bash - 从脚本传递多个数组参数
Bash - Pass multiple array arguments from script
我正在按照 README 文件中提供的说明使用 XcodeCoverageConverter 将 XCResult 转换为 Cobertura XML。
当只有一项作为 --exclude-packages
的值传递时,它按预期工作。
但是,当我尝试按如下方式传递数组时,
xcc generate coverage.json TargetDirectory cobertura-xml --exclude-packages Tests AnotherPackageName --verbose
我收到以下错误,
Error: The value 'AnotherPackageName' is invalid for '<output-formats>'
Usage: xcc generate <json-file> <output-path> [<output-formats> ...] [--exclude-targets <exclude-targets> ...] [--exclude-packages <exclude-packages> ...] [--verbose]
我正在从我的 Bash 脚本中尝试同样的事情,如果我为 --exclude-packages
.
传递数组,我会得到同样的错误
示例 1
jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
xcc generate $jsonPath \
$coberturaTargetPath cobertura-xml \
--exclude-packages Tests AnotherPackageName \
--verbose
示例 2
jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
excludePackages=(Tests AnotherPackageName)
xcc generate $jsonPath \
$coberturaTargetPath cobertura-xml \
--exclude-packages ${excludePackages[@]} \
--verbose
示例 3
jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
excludePackages=(Tests AnotherPackageName)
xcc generate $jsonPath \
$coberturaTargetPath cobertura-xml \
--exclude-packages=${excludePackages[@]} \
--verbose
示例 4
jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
outputFormats=(cobertura-xml)
excludePackages=(Tests AnotherPackageName)
xcc generate $jsonPath \
$coberturaTargetPath ${outputFormats[@]} \
--exclude-packages=${excludePackages[@]} \
--verbose
示例 5
jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
outputFormats=(cobertura-xml)
excludePackages=(Tests AnotherPackageName)
xcc generate $jsonPath \
$coberturaTargetPath ${outputFormats[@]} \
--exclude-packages="${excludePackages[@]} " \
--verbose
在上述所有尝试中,我都遇到了同样的错误。
我为 --exclude-packages 传递的项目(不包括第一项)被认为是输出格式。
如何解决这个问题?
更新:
xcc 实用程序确实支持 --exclude-packages
的多个参数。 Reference
使用 https://shellcheck.net 检查您的脚本。
假设xcc
实用程序支持多个--exclude-packages
参数,那么:对于每个数组元素,在每个数组元素之前添加--exclude-packages,然后将其传递给命令。
excludePackages=(Tests AnotherPackageName)
cmd=(
xcc generate
"$jsonPath"
"$coberturaTargetPath"
"${outputFormats[@]}"
)
for ii in "${excludePackages[@]}"; do
cmd+=(--exclude-packages "$ii")
done
cmd+=(--verbose)
echo "Running: ${cmd[*]}"
"${cmd[@]}"
我正在按照 README 文件中提供的说明使用 XcodeCoverageConverter 将 XCResult 转换为 Cobertura XML。
当只有一项作为 --exclude-packages
的值传递时,它按预期工作。
但是,当我尝试按如下方式传递数组时,
xcc generate coverage.json TargetDirectory cobertura-xml --exclude-packages Tests AnotherPackageName --verbose
我收到以下错误,
Error: The value 'AnotherPackageName' is invalid for '<output-formats>'
Usage: xcc generate <json-file> <output-path> [<output-formats> ...] [--exclude-targets <exclude-targets> ...] [--exclude-packages <exclude-packages> ...] [--verbose]
我正在从我的 Bash 脚本中尝试同样的事情,如果我为 --exclude-packages
.
示例 1
jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
xcc generate $jsonPath \
$coberturaTargetPath cobertura-xml \
--exclude-packages Tests AnotherPackageName \
--verbose
示例 2
jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
excludePackages=(Tests AnotherPackageName)
xcc generate $jsonPath \
$coberturaTargetPath cobertura-xml \
--exclude-packages ${excludePackages[@]} \
--verbose
示例 3
jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
excludePackages=(Tests AnotherPackageName)
xcc generate $jsonPath \
$coberturaTargetPath cobertura-xml \
--exclude-packages=${excludePackages[@]} \
--verbose
示例 4
jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
outputFormats=(cobertura-xml)
excludePackages=(Tests AnotherPackageName)
xcc generate $jsonPath \
$coberturaTargetPath ${outputFormats[@]} \
--exclude-packages=${excludePackages[@]} \
--verbose
示例 5
jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
outputFormats=(cobertura-xml)
excludePackages=(Tests AnotherPackageName)
xcc generate $jsonPath \
$coberturaTargetPath ${outputFormats[@]} \
--exclude-packages="${excludePackages[@]} " \
--verbose
在上述所有尝试中,我都遇到了同样的错误。 我为 --exclude-packages 传递的项目(不包括第一项)被认为是输出格式。 如何解决这个问题?
更新:
xcc 实用程序确实支持 --exclude-packages
的多个参数。 Reference
使用 https://shellcheck.net 检查您的脚本。
假设xcc
实用程序支持多个--exclude-packages
参数,那么:对于每个数组元素,在每个数组元素之前添加--exclude-packages,然后将其传递给命令。
excludePackages=(Tests AnotherPackageName)
cmd=(
xcc generate
"$jsonPath"
"$coberturaTargetPath"
"${outputFormats[@]}"
)
for ii in "${excludePackages[@]}"; do
cmd+=(--exclude-packages "$ii")
done
cmd+=(--verbose)
echo "Running: ${cmd[*]}"
"${cmd[@]}"