我可以将参数传递到使用curl下载的脚本中,并让脚本接受它们为$ 1,$ 2等。试图让这个说出Hello world
$ curl mysite.com
echo hello $1
$ echo world | curl mysite.com
echo hello $1
$ echo world | $(curl mysite.com)
hello $1
答案 0 :(得分: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"'
(如果你的shell不是Bash,或者你被困在20世纪90年代中期,而Bash 2.x和Debian Potato是热门新闻,你可以用常规here document替换<<<'here string'
。 )