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보다 나은가요?토론을 위해. )

관련 정보