【问题标题】:jq: error: TOKEN/0 is not defined at <top-level>, line 1: [duplicate]jq:错误:TOKEN/0 未在 <top-level> 中定义,第 1 行:[重复]
【发布时间】:2020-08-21 12:57:45
【问题描述】:

以下是 JSON 文件:

{
    "awsIAMCred" : "replaceme",
    "DatabaseName" : "replaceme"
}

下面是 bash 文件:

#!/bin/bash

echo BEGIN
date '+%Y-%m-%d %H:%M:%S'

TOKEN=mouse

touch connector.json

yum -y install moreutils            
yum -y install nano
yum -y install nc
echo install of nano,nc and moreutils are done
chmod 660 connector.json

jq '.awsIAMCred = "hello"' connector.json|sponge connector.json
jq '.DatabaseName = $TOKEN' connector.json|sponge connector.json
cat connector.json

我遇到了这个异常:

jq: error: TOKEN/0 is not defined at , line 1:

请帮忙。

【问题讨论】:

  • 你想做什么?你到底在做什么?你的目标是什么?
  • 另外,在你显示的脚本中,connector.json 是空的,它会从哪里得到你显示的内容?
  • 尝试使用jq ".DatabaseName = $TOKEN" 而不是jq '.DatabaseName = $TOKEN'。单引号可防止 bash 进行变量扩展。
  • @GiorgiTsiklauri,我从 yaml 文件中获取令牌并将其传递给 bash 文件,在这里我希望它替换我的一个 json 值(DatabaseName 键)
  • @GiorgiTsiklauri,我上面提到的json是connector.json

标签: bash environment-variables jq


【解决方案1】:

正如评论中所指出的,可以使问题中 jq 的第二次调用起作用,但使用字符串插值通常被认为是最好避免的反模式。有很多选择,例如:

jq --arg token "$TOKEN" '.DatabaseName = $token' connector.json

还请注意,这两个更新都可以并且也许应该通过一次 jq 调用来执行,例如大致如下:

jq --arg token "$TOKEN" '.awsIAMCred = "hello" | .DatabaseName = $token' connector.json

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多