首页 > 解决方案 > 我怎样才能最便携地通过 HTTP 从 shell 脚本下载?我可以依靠 curl 或 wget 吗?

问题描述

我想编写一个可移植的 shell 脚本并在各种 Linux 系统上运行,也许还有其他 Unix 系统(*BSD、macOS)。该shell脚本需要下载文件。

哪个下载工具更有望默认预装?卷曲还是 Wget?

请注意,我对两者中哪一个当前“更好”或更受欢迎并不感兴趣。相反,我正在寻找代码尽可能少的最佳长期解决方案。

标签: shellunixcurlwgetportability

解决方案


如果您需要支持广泛的系统——从旧安装(更可能支持wget)到未来安装(更可能支持curl),您真的应该同时支持两者。

这可以通过一个检查哪个工具可用的 shell 函数来完成:

# usage: retrieve_url url
# results will be written to stdout
retrieve_url() {
  if command -v curl >/dev/null 2>&1; then
    curl --fail "$@"
  elif command -v wget >/dev/null 2>&1; then
    wget -O- "$@"
  else
    echo "ERROR: Unable to find either curl or wget" >&2
    exit 1
  fi
}

鉴于这种通用方法,应该可以将其扩展为也支持其他工具——例如通过运行仅运行标准库代码的嵌入式 Python 脚本。(在构建适合嵌入的 Python 下载脚本时可能遇到的问题,该脚本在 Python 2.5 和未来 3.x 版本之间的任何位置运行,最好单独询问,并标记为适当的社区)。


推荐阅读