如何最方便地通过 HTTP 从 shell 脚本下载?我可以依赖 curl 或 wget 吗?

How can I most portably download via HTTP from a shell script? Can I rely on curl or wget?

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

默认预装哪个下载工具更值得期待? Curl 还是 Wget?

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

如果您需要支持范围广泛的系统 -- 从旧安装(更有可能支持 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 脚本仅 运行ning标准库代码。 (在构建适合嵌入的 Python 下载脚本时可能遇到的问题,运行 介于 Python 2.5 和未来 3.x 版本之间的任何地方,最好单独询问,标记为适当的社区)。