curl
私の目標は、コマンドの出力をペイロードとして使用してcurl
実行することです。 2つは別々に機能しますが、2つを1つにマージすることはできません。
これは、以前のバージョン以降の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
これら2つのコマンドを1行で送信する方法はありますか?
答え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では、パッケージマネージャを介して簡単に使用できます。