如何在脚本中获取目标目录?

时间:2014-03-03 17:40:39

标签: sbt

我正在尝试获取多模块项目中模块的目标目录。我遇到的挑战是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秒,因此,对于此项目中的大量模块,为每个模块调用它会占据主导地位。

如何在脚本中获取目标目录?

1 个答案:

答案 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发出相对较少的输出)。