【问题标题】:jq: 1 compile error jq: error: schedule/0 is not defined at <top-level>, line 1: .Christchurch.bus-schedule.from["Weekday"] |= . + ["1646"]jq: 1 编译错误 jq: error: schedule/0 is not defined at <top-level>, line 1: .Christchurch.bus-schedule.from["Weekday"] |= 。 + [“1646”]
【发布时间】:2019-05-09 03:01:17
【问题描述】:

我有一个 react 应用程序,它使用 .sh 文件生成应用程序的一部分。但是我遇到了一个错误,导致应用程序无法读取数据文件。

我查看了版本控制,.sh 文件(emap.sh)中可能的语法更改

这是.sh 文件

#!/bin/bash
object='{}'

find 'public/data' -type f -name '*.csv' | while read -r filename;
do
    filename=$(echo "$filename" | sed 's/public\/data\///' | sed 's/ /\//')
    city=$(echo "$filename" | cut -d'/' -f1)
    medium=$(echo "$filename" | cut -d'/' -f2)
    direction=$(echo "$filename" | cut -d'/' -f3)
    date=$(echo "$filename" | cut -d'/' -f4)
    time=$(echo "$filename" | cut -d'/' -f5| head -c-5)
    object=$(echo $object | jq -c ".$city.$medium.$direction[\"$date\"] |= . + [\"$time\"]")
    echo $object > public/available.json
done

它应该是成功的,这样当我们对应用程序进行线程化时,它会显示已读取数据,但是我们使用需要处理的信息在该区域中获得了一个没有数据的页面。

【问题讨论】:

  • 以在脚本中完成的方式将诸如 $city 之类的 bash 变量传递给 jq 是自找麻烦。考虑改用 jq 的 --arg 命令行选项。请注意,这也需要对 jq 脚本进行一些小的更改。
  • @peak 整个任务可以仅使用findjq 完成,对吗? OP 在 while 循环中对 object 所做的正是 reduce/foreach 所做的
  • @oguzismail - 看着脚本让我头晕目眩,所以我只专注于 jq 的调用......

标签: reactjs compilation jq yarnpkg toplevel


【解决方案1】:

shell 变量应该以更健壮的方式传递给 jq,例如沿着这些思路:


jq -c --arg city "$city" \
      --arg medium "$medium" \
      --arg direction "$direction" \
      --arg date "$date" \
      --arg time "$time" \
   '.[$city][$medium][$direction][$date] += [$time]'

正如@OguzIsmail 指出的那样,您最好避免所有的混乱,只使用findjq

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多