bash,测试curl是不是存在,如果不存在则安装[重复]

Posted

技术标签:

【中文标题】bash,测试curl是不是存在,如果不存在则安装[重复]【英文标题】:bash, test if curl exists, and install if it does not [duplicate]bash,测试curl是否存在,如果不存在则安装[重复] 【发布时间】:2021-03-09 08:56:03 【问题描述】:

我搜索了许多解决方案,但没有找到一个完全有效的解决方案。我自己的粗活是:

[ $(which curl) -eq "" ] || sudo apt install curl

这不太行,说“一元运算符预期”。我试过===,所以我不知道如何做这样的测试。 which curl 的空输出是否有可能是 $null 并且我必须对此进行测试?

或者,有没有办法只运行sudo apt install curl,然后在最后运行2>&null 来抑制它是否已经安装?

【问题讨论】:

简单的解决方法是引用命令替换。当然你可以运行sudo apt -y install curl >/dev/null 2>&1,但是如果用户没有缓存他们的sudo密码,那将会失败或挂起。 @YorSubs :从技术上讲,您不需要测试可执行文件curl 是否存在,您只需测试它是否存在并且在您的PATH 中。此外,您不知道(无论隐藏在名称 curl 后面的内容)是否是您需要的那个版本的 curl。一种替代方法是运行 curl --version 并解析其输出。 我明白你的意思。对/usr/bin/curl 的测试会更加严格(我不需要完全防弹,如果有人将不是curl 的下载版本的文件放在那里会很奇怪)。那么我唯一的问题是:不同的发行版是否将curl 放在不同的地方,或者/usr/bin/curl 会是一个可靠的跨平台位置吗? 其他发行版不仅可以将 curl 放在其他位置,还可以使用与 apt 不同的安装程序。 【参考方案1】:

which如果找不到程序则返回失败,所以你可以

which curl &> /dev/null || sudo apt install curl

请注意,如果有人在 $PATH 中有一个名为 curl 的不同程序,该脚本稍后仍可能失败。

-eq 比较数字,而不是字符串。

【讨论】:

哈哈,这是保持外壳便携的一种创造性方式,谢谢!

以上是关于bash,测试curl是不是存在,如果不存在则安装[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Bash 测试文件中是不是存在字符串?

jQuery检查Cookie是不是存在,如果不存在则创建它

使用 cURL 检查 FTPS 站点上是不是存在文件

Bash/awk:当模式不存在时,仅打印一次“不存在”,而不是每行

测试 glob 在 Bash 中是不是有任何匹配项

bash if 表达式含义