1

curl を使用してダウンロードしたスクリプトにパラメータをパイプして、スクリプトに $1、$2 などとして受け入れさせることはできますか?

$ curl mysite.com
echo hello $1

$ echo world | curl mysite.com
echo hello $1

$ echo world | $(curl mysite.com)
hello $1
4

1 に答える 1

0

curlからにテキストをパイプできますsh

curl http://example.com/ | sh /dev/stdin world

スクリプト名は、明らかに/dev/stdinを持たないプラットフォームには移植できません/dev/stdin。あなたはそれを次のようなもので回避することができます

sh -c "$(curl http://example.com/)" _ world

の後の最初のパラメータは にsh -c '...'入る$0ため、そのためにダミー パラメータ_が提供されます。

いずれにせよ、URL に完全な自信がない限り、これは非常に安全ではありません。たとえば、http: //blog.classicalcode.com/2012/11/curl-pipe-sh-exploit-proof-of-concept/を参照してください。

を使用せずにテストするcurlには、単純に に置き換えるcurl http://example.com/echo 'echo "hello $1"'、標準入力で静的文字列を指定するだけです。

sh /dev/stdin world <<<'echo "hello $1"'

(シェルが Bash でない場合、または 1990 年代半ばに立ち往生していて Bash 2.x と Debian Potato がホット ニュースである場合は、<<<'here string'を通常のhere ドキュメントに置き換えることができます。)

于 2013-09-05T05:32:38.063 に答える