linux - 获取 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;"
解决方案
当像这样调用(没有域)时,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"
推荐阅读
- ms-word - Office 365 加载项 (office-js),尝试打开新文档时发生错误 -> RichApi.Error: Word 在浏览器中不支持该操作
- c# - C#(.NET Core)类中具有“给定值”(有效值列表)的状态字段
- python - Python urllib 请求导致 HTTP 错误 404 not found
- javascript - 如何防止axios在状态更新前发帖
- mysql - 是否可以在不使用自定义函数的情况下仅从 MySQL 的 VARCHAR 字段中选择数字字符?
- reactjs - AWS IVS:隐藏式字幕进入 aws IVS 通道进入 ReactJS 组件
- python - 优化熊猫中的嵌套循环
- pdf - 如何在 .Net 核心中将 FileStream WordprocessingDocument 文档转换为 PDF
- datastore - 在 Rancher 上使用 vsphere 数据存储集群
- sql - 当“LIKE”子句包含参数时,SQL Server 不使用索引