xargsを使ってコマンドを実行後ファイルを書き出す
パイプ(|)とリダイレクト(>)
次のような形でlsで表示したファイルを全てcurlでpostできる:
ls | xargs -IXXXX curl -H POST $url -H 'Content-Type: application/json' -d @./XXXX -H "Authorization: Bearer ${BEARER_TOKEN}"
そこでそれぞれの結果をresXXXXという名前のファイルに保存したいのでリダイレクト(>)を使ってみるのだが次のコードだとうまく行かない:
ls | xargs -IXXXX curl -H POST $url -H 'Content-Type: application/json' -d @./XXXX -H "Authorization: Bearer ${BEARER_TOKEN}" > res_XXXX
思いついた解法:
ls | xargs -IXXXX bash -c "curl -H POST $url -H 'Content-Type: application/json' -d @./XXXX -H \"Authorization: Bearer ${BEARER_TOKEN}\" > res_XXXX"
jqコマンド
次のコマンドは何も返ってこない:
ls | grep json | xargs -IXXXX curl -H POST $url -H 'Content-Type: application/json' -d @./XXXX -H "Authorization: Bearer ${BEARER_TOKEN}" | jq . | echo
しかしechoの代わりにcatにするとjsonが返ってくる:
ls | grep json | xargs -IXXXX curl -H POST $url -H 'Content-Type: application/json' -d @./XXXX -H "Authorization: Bearer ${BEARER_TOKEN}" | jq . | cat
echo
echo "hoge" | echo
echo "hoge" | cat
echo "hoge" | echo -e
awscliでECSのクラスターの全てのサービスを1にするコマンド
aws ecs list-services --cluster $cluseter | jq '.serviceArns[]' | sed 's/arn:aws:ecs:hogehoge:service\/cluster\///g' | sed 's/"//g' |xargs -IXXX aws ecs update-service --cluster $cluster--service XXX --desired-count 1 | cat
shell scriptでエラーがあった時に中断させる
set -e