如果我使用此链接安装 docker-compose,则会收到 Not Found 错误:
[root@hostname ~]# curl -L "https://github.com/docker/compose/releases/download/2.9.0/docker-compose-$(uname -s)-$(uname -m)" -o here
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9 100 9 0 0 37 0 --:--:-- --:--:-- --:--:-- 37
[root@hostname ~]# cat here
Not Found
那是因为实际文件是docker-compose-linux-x86_64
small l
,而:
[root@hostname ~]# echo $(uname -s)-$(uname -m)
Linux-x86_64
它返回资本L
。
我看到man curl
但没有看到任何用于检查不区分大小写链接的条目。
决定不区分大小写的根本不是 curl - 链接“检查”是服务器的决定。
(换句话说,HTTP 客户端没有机会查看所有可能的 URL 列表并选择匹配的 URL。HTTP 客户端唯一能做的就是将确切的 URL 提供给服务器并让服务器决定如何响应. 有些服务器不区分大小写,有些则不。)
但是如果你已经知道你需要一个小写的“linux”,你可以在将输出转换为 curl之前
uname
转换输出,例如通过管道将所有大写字母更改为小写:tr A-Z a-z
或通过使用 Bash 的
${var,,}
扩展返回小写版本$var
:最后,由于只有一小部分接受的值,并且通常不能保证接受的值是“uname 但小写”,因此您可以间接分配每个可能的值(使用
if
orcase
块),例如:(注意:“windows”示例完全是虚构的。)
域名后的部分是否区分大小写由服务器决定。
要完全模拟服务器的不区分大小写,
curl
必须尝试所有可能的组合(…LiNUx…
,…linUX…
),并且它们的数量很大。如果您知道服务器使用全小写字符串,那么合理的做法是将 URL 转换为小写,然后再提供给
curl
. Bash 示例:但是正确的 URL 是 with
v2.9.0
并且有问题的服务器实际上对组件不区分大小写。docker-compose-…
对您来说最简单的解决方法就是添加缺少的v
:没有这个,
v
任何转换都无济于事。正如其他人已经指出的那样,不区分大小写是在服务器端配置的,您无法从您的机器上更改它。
但是,您可以使用其他一些工具将字符串转换为小写: