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

时间:2018-10-03 09:36:56

标签: shell unix curl wget portability

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

预计预安装了哪些下载工具?卷发还是Wget?

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

1 个答案:

答案 0 :(得分:1)

如果您需要支持广泛的系统-从旧的安装(更可能支持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版本之间的任何地方运行,并针对相应的社区进行标记。)