linux - curl : (3) URL using bad/illegal format

标签 linux bash docker ubuntu curl

我的 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;"

最佳答案

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

curl http://
让我们定义一个有 curl 的图像。
$ 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"

关于linux - curl : (3) URL using bad/illegal format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69763806/

相关文章:

java - 从 Windows 主机迁移到 Linux 主机后 Web 应用程序出现问题

windows - 如何自动更改文件内容?

linux - 比较两个文件并获得相同行的输出

linux - 如何在 bash 中一次一行地将变量传递给脚本?

Docker 默认操作系统

linux - 我如何在Linux中符号链接(symbolic link)主目录

c - 将硬安装的 NFS 卷视为软卷

bash 脚本 : meaning of while read in a simple script that use inotifywait

curl - Asp.net Core Docker容器出站HTTPS调用失败

python-2.7 - 获取服务器 API 版本时出现 Docker 错误