curl
내 목표는 명령의 출력을 페이로드로 사용하여 curl
실행하는 것입니다. 이 둘은 별도로 작동하지만 둘을 하나로 병합할 수는 없습니다.
이것은 이전 버전 이후 GIT 저장소의 변경 사항을 인쇄하는 첫 번째 명령입니다.
git log --pretty=oneline HEAD...$(git tag -l | tail -n2 | head -n1)
좋아, 이제 어떻게든 이 출력을 이 컬 문장에 도입하고 싶습니다.
curl -vX POST --data-urlencode 'payload={"text": "< GIT LOG OUTPUT >"}' https://example.com
이 두 명령을 한 줄로 전송할 수 있는 방법이 있습니까?
답변1
다음과 같이 시도해 볼 수 있습니다.
curl -vX POST --data-urlencode \
"payload={\"text\":\"`git log --pretty=oneline HEAD...$(git tag -l | tail -n2 | head -n1) | tr '\n' ',' | sed 's|,$||'`\"}" \
https://<your-remote>
답변2
jo
올바르게 인코딩된 JSON을 생성 하려면 다음을 수행하세요.
curl -vX POST --data-urlencode \
payload="$(
jo text="$(
git log --pretty=oneline HEAD...$(git tag -l | tail -n2 | head -n1)
)"
)"
여기서 가장 중요한 것은 명령입니다.
jo text="$( git log ... )"
그러면 키가 포함된 JSON 문서가 출력됩니다 text
. 이 키의 값은 출력 데이터가 되며 git log
개행 문자는 대체 \n
되고 다른 문자는 올바른 JSON 인코딩 해당 문자로 대체됩니다.
jo
대부분의 Unices에서 패키지 관리자를 통해 쉽게 사용할 수 있습니다.