【问题标题】: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 不同的安装程序。

标签: bash curl sudo


【解决方案1】:

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

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

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

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

【讨论】:

  • 哈哈,这是保持外壳便携的一种创造性方式,谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-03-02
  • 2019-08-08
  • 1970-01-01
  • 2011-09-07
  • 2011-02-25
  • 2012-12-30
  • 2017-11-22
  • 1970-01-01
相关资源
最近更新 更多