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是不是存在,如果不存在则安装[重复]的主要内容,如果未能解决你的问题,请参考以下文章