【发布时间】:2020-06-24 13:12:42
【问题描述】:
我正在尝试使用 curl 命令向 ElasticSearch 数据库发送查询, 但是在使用 bash 脚本构建字符串时遇到了困难。
首先,不带任何变量,以下命令运行成功:
curl -XGET << "EOT" "stg-myserver.stg.xyz2.bdd.local:9200/stg_index-2020.03.10/_data?format=csv&fields_name=personId,totalPrice,regDatetime&_source=" -d '
{
"query": {
"bool": {
"filter": [{
"range" : {
"regDatetime" : {
"gte" : "2020-03-11T08:00:00+09:00",
"lte" : "2020-03-11T08:59:59+09:00"
}
}
}]
}
}
}'
EOT
但是,当尝试将变量替换为 regDatetime 值时,查询会失败。
START_TIME='2020-03-11T08:00:00+09:00'
END_TIME='2020-03-11T08:59:59+09:00'
curl -XGET << "EOT" "stg-myserver.stg.xyz2.bdd.local:9200/stg_index-2020.03.10/_data?format=csv&fields_name=personId,totalPrice,regDatetime&_source=" -d '
{
"query": {
"bool": {
"filter": [{
"range" : {
"regDatetime" : {
"gte" : "$START_TIME",
"lte" : "$END_TIME"
}
}
}]
}
}
}'
EOT
执行第二条语句后,我收到以下错误:
{"error":{"root_cause":[{"type":"parse_exception","reason":"无法解析日期字段 [$START_TIME]...
如何访问 START_TIME 和 END_TIME?
使用heredoc是一个合理的解决方案吗,或者任何人都可以推荐一种不易出错的方法吗?
【问题讨论】:
-
你为什么要在这里使用 here-document(
<<"EOT"位)?那一长串 JSON 在一个单引号参数中,所以 here-doc 最终是空的,我认为curl无论如何都不会尝试从中读取。
标签: bash elasticsearch curl heredoc