【发布时间】:2014-11-01 18:17:24
【问题描述】:
我写了一个 Bash 脚本
#!/usr/bin/env bash
SEVEN_DAYS="$((1000 * 60 * 60 * 24 * 7))"
TODAY=$(($(gdate +'%s * 1000 + %N / 1000000')))
PAST_WEEK=$(($TODAY - $SEVEN_DAYS))
get-stuff() {
stuff=$(curl -s localhost:8888/path/to/data | jq --raw-output '[.time_series_by_stuff[].counts | keys | .[]] | unique | sort | .[]')
echo $stuff
}
get-last-weeks-events-by-stuff() {
for stuff in $(get-stuff); do
result=$(curl -s localhost:8888/path/to/$stuff/_search -d "{\"query\":\"range\":{\"ingestDate\":{ \"gte\":$PAST_WEEK}}}" | jq 'hits.total')
echo $stuff
echo $result
done
}
在命令行get-stuff 上单独执行时,将回显我需要的值,例如foo、bar、baz。
如何捕获每个值,以便它们可以在 get-last-weeks-events-by-stuff 内的 curl 命令中正确展开?
我应该创建一个像
这样的 tmp 变量吗?get-last-weeks-events-by-stuff() {
for stuff in $(get-stuff); do
tmp=$stuff
result=$(curl -s localhost:8888/path/to/$tmp ...
最终,当我调用get-last-weeks-events-by-stuff 时,它应该会产生类似
foo
12
bar
15
【问题讨论】:
-
你的风格很奇怪。在
get-stuff中,您不需要变量stuff和echo $stuff。curl ... | jq ...就足够了——除非你依赖路径名扩展,但我对此表示怀疑。此外,函数名中的连字符……也很奇怪。不要这样做。 -
循环是否遍历
get-stuff返回的所有值?以bash -x <script>身份运行脚本可能会有所帮助。