我正在编写一个需要从 Internet 下载一些数据的 shell 脚本,我只是在想是否可以依靠cURL它预装在所有 Unix 发行版上。
我知道wget默认情况下不在 OS X 上,但在 OS XcURL上。我还记得我cURL在 Ubuntu Server 上安装,但已经一两年了。我今天尝试了 Ubuntu Server 12.04,它是cURL开箱即用的。
curl 和 wget 都不能“保证”安装在任何地方,尤其是在正确的 UNIX 系统上。它们不是 POSIX 标准。ftp、ssh / scp / sftp、rsync、telnet、nc / netcat、openssl 或可能想到的任何相关工具都不是。对我来说,这似乎是一个奇怪的疏忽,但事实就是如此。
各种 GNU/Linux 发行版可能包括curl 和/或wget,但YMMV。
对于这种情况,FreeBSD 标配了“ fetch ”工具,而 OpenBSD 则配备了一个增强的“ ftp ”客户端,可以通过“AUTO-FETCHING”功能完成这项工作。
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/
据我所知,POSIX根本没有定义“tcp”文件传输工具。 uucp是标准的,但我不知道您是否可以在两端不更改配置的情况下使其工作。
您可以对它们进行测试(正如许多人所建议的那样),但为了确定您需要安装一些东西或编写一些东西。
具有 tcp 套接字支持的 shell(如 ksh93 或 Bash)应该可以让您在紧要关头编写函数调用。当然,您仍然需要适当的权限来读取/写入套接字。
GNU awk(“gawk”)可以做到这一点,但是对我来说,拥有 gawk 以及没有像curl 或 wget 这样更方便的东西的可能性很小。可以肯定POSIX awk不支持网络,我不记得在“ The AWK 编程语言”中看到过任何有关它的内容,但已经有一段时间了。当然,Perl、Python、Ruby、C 等也可以做到。
请参阅: https: //www.shell-tips.com/bash/download-files-from-shell/
https://unix.stackexchange.com/questions/336876/simple-shell-script-to-send-socket-message
注意:截至 2022 年,古腾堡计划似乎不再支持通过端口 80 进行不安全下载,因此下面的脚本示例已使用 HTTP 镜像进行了更新。
#!/bin/ksh
## Tested with ksh93u+ and Bash v3.2x
## Not tested with Binary files
## HTTP/1.1 will cause output to hang
#xHOST=gutenberg.org
#xDOC=/files/84/old/84.txt
gpHOST=mirrors.xmission.com
gpDOC=/gutenberg/8/84/old/84.txt
gpPORT=80
exec 3<>/dev/tcp/${gpHOST}/${gpPORT}
printf "GET ${gpDOC} HTTP/1.0\r\nHost: ${gpHOST}\r\n\r\n" >&3
# drop the header from the data stream
while IFS= read -r line ; do
[ "$line" == $'\r' ] && break
done <&3
cat <&3 | tee Frankenstein.txt
Run Code Online (Sandbox Code Playgroud)
专业提示:“tar”也不是 POSIX!请改用“ pax ”。
其他一切都等于我会说你安装 wget 的可能性更大。
然而,为什么不简单地创建一个条件,在 PATH 中同时查找 wget 和 curl,并使用任何可用的东西(如果有的话)?如果你想野心勃勃,也可以随意在 lynx、w3m 等中混用。