관련이 있는 경우 BSD용으로 작성된 bash 스크립트를 Linux에서 실행하려고 합니다. 이제 나는 다음 줄에 걸려 넘어졌습니다.
json="$(sudo -u "${vpnUser}" -- curl --interface "${adaptorName}" --get --insecure --silent --show-error --fail --location --max-time "${curlMaxTime}" --data-urlencode "token=${authToken}" "https://${gatewayAddress}:19999/getSignature" | jq -Mre)"
스크립트의 변수 값을 에코했는데 괜찮아 보입니다. 그런 다음 변수를 값으로 바꿨습니다. 그런 다음 jq는 구문 오류(일반 출력)에 대해 불평하는 것 같고 Usage:
, 내 생각에는 컬이 (23) Failed writing body
. 명령을 실행하면 sudo -u ... | jq -Mre
JSON 파일처럼 보이는 내용이 인쇄됩니다.
답변1
문제는 jq
1.6 이전 버전에서는필터달리기. 가장 간단한 필터는 입력과 동일한 출력을 생성하는 ID 필터입니다. 이는 에서 단일 지점으로 작성됩니다 jq
.
코드를 작동시키려면:
json=$( ... | jq -r -e . )
함께 사용할 옵션은 다음과 같습니다 jq
.
이 옵션은 무색 출력이 요청된다는 점을 제외하면
-M
와 동일합니다 .--monochrome-output
이는jq
터미널에 쓰지 않을 때의 기본값이므로 이 옵션은 제거될 가능성이 높습니다.이
-r
옵션은 와 동일합니다--raw-output
.jq
출력 시맨줄(문자열을 포함하는 JSON 구조가 아님) 문자열이 디코딩됩니다. 이는 출력 문자열이 인용되지 않고 , 확장 과\n
같은 특수 문자 시퀀스를 포함함을 의미합니다 . 이 옵션은\t
\"
아니요입력이jq
디코딩해야 하는 JSON 인코딩 문자열 세트인 경우 이는 제거됩니다.이
-e
옵션은 과 동일합니다--exit-status
. 이 옵션을 사용하면jq
종료의 종료 상태가 마지막으로 평가된 값을 반영하게 됩니다. 이는 명령이 다음과 같이 종료됨을 의미합니다.실패하다최종 결과가null
또는false
. 셸 옵션이 활성화된 상태에서 스크립트가errexit
실행되면 여기서 0이 아닌 종료 상태로 인해jq
스크립트가 종료됩니다. 즉, 명령이 발생하는 스크립트에 대해 더 자세히 알지 못하면 이 옵션을 제거할 수 없습니다.
jq
나는 여기서 사용이 단지 curl
결과를 예쁘게 인쇄하는 것이라고 생각합니다 . 원 작성자가 실제로 생각하지 않고 어딘가에서 이 세 가지 옵션을 복사했을 가능성이 있지만(포함된 항목에서 이를 알 수 있음 ) 스크립트를 종료하기 -M
위해 종료 상태에 의존했을 수도 있습니다 .jq
답변2
그것은 중요하지 않습니다! 아이리시 커피 한 잔과 jq
몇 가지 연구를 마친 후, 저자가 기본적으로 더 읽기 쉬운 여러 줄 출력으로 형식화하는 것 외에는 데이터에 대해 아무 작업도 수행하지 않는 파서를 통해 출력을 파이프하는 이유가 궁금합니다. help 다음의 모든 내용을 삭제하세요 |
.