やりたい事
curlのラッパーを作成したいで。(都度生成したヘッダを追加する)
コード
デバッグの為、curlでなくechoにしてます
#!/bin/bash if [ -p /dev/stdin ];then echo "=pipe=" stdin=$(cat -) echo "${stdin}" #echo "${stdin}" | curl -H "foo:bar" $@ else echo "=not pipe"= #curl -H "foo:bar" $@ fi
【挙動確認】
$ ./test1.sh =not pipe= $ echo foo | ./test1.sh =pipe= foo
問題点
しかしこれだと、標準入力を用いたwhileループ内で使った時に
意図せず標準入力を全て吸い出してしまう事がわかりました。
【期待した出力】
$ seq 3 | while read c;do ./curl.sh ;done =not pipe= =not pipe= =not pipe=
→3回実行して欲しい
【実際の出力】
$ seq 3 | while read c;do ./curl.sh ;done =pipe= 2 3
→1回しか実行されていない。
→curl.sh内で標準出力の残り全部が読み込まれている
最終的にcurlコマンドと同じ使い方が出来る様にしたいです。
(運用回避はなし。自分以外も使うので、細かい運用ルールは守られない可能性があるし、事故になる)
aliasでcurlにヘッダを付ける事も考えましたが、
準備が必要になるし、できれば1スクリプトで完結させたいです。
これについて、解決法があれば教えてください。
補足
コメントアウトを外した上で下記が通常のcurlと同じ挙動をするようにしたいです。
パイプなし
$ curl.sh example.com/1/
パイプ有り
$ echo '{ "foo":"bar" }' | curl.sh -X POST -d @- example.com/1/
直接のパイプはないが標準入力がパイプ
$ seq 3 | while read c;do ./curl.sh example.com/$c/ ;done
回答3件
あなたの回答
tips
プレビュー