首页 > 解决方案 > 获取 curl:(3)使用错误/非法格式的 URL

问题描述

我的 bash 代码就是这样。我正在尝试学习 docker,但同时也是一个使用 bash 脚本的新手。我为读取命令输入了一些简单的内容,例如 google.com,但它给了我 curl:(3) URL 使用错误/非法格式或缺少 URL。有人知道我在做什么错吗?

docker exec -it missingDependencies sh -c "echo 'Input Website:'; read website; echo 'Searching..'; sleep 1; curl http://$website;"

标签: linuxbashdockerubuntucurl

解决方案


当像这样调用(没有域)时,Curl 会给出警告:

curl http://

让我们定义一个有卷曲的图像。

$ cat Dockerfile 
  FROM ubuntu:latest
  RUN apt-get update
  RUN apt-get install -y curl

并组装它:

docker build .  -t foobar

所以现在我们可以运行你的脚本了。

$ docker run -it --rm foobar /bin/sh -c \
  "set -x; echo 'Input Website:'; read website; echo 'Searching..'; curl https://$website ;"

+ echo Input Website:
Input Website:
+ read website
google.com
+ echo Searching..
Searching..
+ curl https://

解决方案

 docker run -it --rm foobar /bin/sh -c \
  "set -x; read -p 'which website?: ' website; echo 'Searching..'; curl https://\$website;"

+ read -p which website?:  website
which website?: google.com
+ echo Searching..
Searching..
+ curl https://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

问题是,当您运行 bash -c "echo whatever $website" 时,$website 变量将从您当前的环境中获取,而不是从 docker 环境中获取(来自读取的网站)。为了抵消 $website 变量被插值,您可以使用单引号,例如 sh -c 'read foo; echo $foo',或转义美元符号:sh -c "read foo; echo \$foo"


推荐阅读