Bashでエラーが発生しました:空の行を含むJSONフィールドをenv varに解析するときに無効な環境変数型 ""

Bashでエラーが発生しました:空の行を含むJSONフィールドをenv varに解析するときに無効な環境変数型

JSONフィールドを.bodyENV変数に保存します。このフィールドの内容は常に複数の文字列と文字に変更され、GitHubのプールリクエストの本文メッセージです。したがって、マークダウンも渡されます。

以下は、次から取得した正確な例です。.body

#Title

## SubTitle

*date*

1. Item 1
2. Item 2
3. Item 3

jqと-rを使用してJSONのネイティブコンテンツを解析するとき:

echo "PR_BODY=$(jq -r '.body' $HOME/pr.json)" >> $GITHUB_ENV

GitHub Actionsでエラーが発生します。

ここに画像の説明を入力してください。

ちなみに、私の計画は、.body次のマークダウンファイルにデータを保存することです。

      run: |
        ed changelog.md <<'END_ED'
        1i

        ${{ env.PR_BODY }}

        .
        wq
        END_ED
        echo >> changelog.md

.bodyエラーなしで空白なしでデータを抽出するにはどうすればよいですか? ENV変数はこの問題に対する答えではないかもしれませんか?

編集:これは.bodyの元の生のJSONです。

"body": "Manually configuring ports for DEV, CAT/QA environments. Migrating from managed service to self-serve \"GCP resource\". \r\n\r\n- [x] DEV\r\n- [x] CAT/QA\r\n- [ ] PROD\r\n\r\n```\r\n# Allow healthcheck on ports 80, 443\r\nresource \"google_compute_firewall\" \"allow-healthcheck\" {\r\n  name = \"${format(\"%s\",\"${var.gcp_resource_name}-${var.gcp_env}-fw-allow-healthcheck\")}\"\r\n  network = \"${google_compute_network.vpc.name}\"\r\n  allow {\r\n    protocol = \"tcp\"\r\n    ports    = [\"80\",\"443\"]\r\n  }\r\n  source_ranges = [\"2.2.0.0/16\", \"1.1.0.0/22\"]\r\n}\r\n```\r\nConfiguring for bug, link here:\r\n[Link To Terraform provider update](https://www.terraform.io/)"

ベストアンサー1

に基づいて「GitHub Actions用のワークフローコマンド」、複数行の値の構文は次$GITHUB_ENVのようになります。

PR_BODY<<EOF
multiline string
here
...
EOF

コマンド置換の値を使用すると、次を使用してシェルから値を生成できます。

printf "PR_BODY<<EOF\n%s\nEOF\n" "$(jq -r '.body' $HOME/pr.json)"

(改行文字を挿入すると簡単に作成できるため、代わりにprintf使用したい可能性があります。echoいいえコマンドの置き換え時にデータが破損しています。バラよりなぜprintfがechoより優れているのですか?議論のために。 )

おすすめ記事