我正在尝试获取多模块项目中模块的目标目录。我遇到的挑战是SBT的日志记录使得难以在脚本中使用。
这就是我现在所拥有的:
function sbt-target {
sbt -Dsbt.log.noformat=true "project $1" 'show target' |
tail -n1 |
cut -c8-
}
我认为这非常hackish,因为它知道来自SBT的每个输出行的 [INFO] 前缀( cut -c8 - )以及SBT的最后一行是我需要的输出( tail -n1 )。
更有问题的是, sbt-target 的每次调用都需要大约11秒,因此,对于此项目中的大量模块,为每个模块调用它会占据主导地位。
如何在脚本中获取目标目录?
答案 0 :(得分:1)
我不能和SBT说话。就bash最佳实践而言,您可能会考虑更类似于以下内容:
sbt_target() {
# declare locals as such
local line version
# iterate through all lines; later lines overwrite variable set by prior ones
while read -r line; do
version=${line#"[INFO] "} # strip undesired prefix if present
done < <(sbt -Dsbt.log.noformat=true "project $1" 'show target')
# emit result to stdout
printf '%s\n' "$version"
}
与依赖于tail和cut的版本不同,它会在bash中处理所有内容,因此效率更高(假设sbt的show target
发出相对较少的输出)。