我希望能够使用我的bash脚本自动下载最新版本的软件。不幸的是,网站上没有像github那样的最新发布链接。 在我的情况下,我需要下载最新的稳定版本的Nginx
目前我用这个 的 http://nginx.org/download/nginx-1.4.7.tar.gz 然后我从源代码编译
问题是我需要不时手动检查更新并更新链接。
有什么方法可以让我的脚本自动获取最新稳定版本的Nginx
通过yum安装P.S不是一个选项
答案 0 :(得分:4)
<强>更新强>:
通过http://nginx.org/en/download.html
(http://nginx.org/download/
确定并下载最新的 稳定版本的解决方案,在以下原始解决方案中使用,不区分稳定版和主线版版本) - 适用于Linux和OSX:
# Determine the latest stable version's download URL, assumed to be
# the first `/download/nginx-*.tar.gz`-like link following the header
# "Stable version".
latestVer=$(curl -s 'http://nginx.org/en/download.html' |
sed 's/</\'$'\n''</g' | sed -n '/>Stable version$/,$ p' |
egrep -m1 -o '/download/nginx-.+\.tar\.gz')
# Download.
curl "http://nginx.org${latestVer}" > nginx-latest.tar.gz
注意:这取决于页面http://nginx.org/en/download.html
的HTML结构的细节,这不是最强大的解决方案。
原始解决方案,通过http://nginx.org/download/
确定最新版本,其中稳定版和主要版之间没有区别:
在 Linux 上,尝试:
# Determine latest version:
latestVer=$(curl 'http://nginx.org/download/' |
grep -oP 'href="nginx-\K[0-9]+\.[0-9]+\.[0-9]+' |
sort -t. -rn -k1,1 -k2,2 -k3,3 | head -1)
# Download latest version:
curl "http://nginx.org/download/nginx-${latestVer}.tar.gz" > nginx-latest.tar.gz
这不依赖于http://nginx.org/download/
的特定列表订单;相反,版本号被提取并适当地排序。
在 OSX - 其中grep
不支持-P
而\K
删除匹配的左侧部分不可用,请尝试:
# Determine latest version:
latestVer=$(curl 'http://nginx.org/download/' |
egrep -o 'href="nginx-[0-9]+\.[0-9]+\.[0-9]+' | sed 's/^href="nginx-//' |
sort -t. -rn -k1,1 -k2,2 -k3,3 | head -1)
# Download latest version:
curl "http://nginx.org/download/nginx-${latestVer}.tar.gz" > nginx-latest.tar.gz
答案 1 :(得分:2)
这将确定最新的稳定版本:
$ lynx -dump http://nginx.org/en/download.html \
| awk '/Stable/{t=1}t&&/nginx-/{$0=$2;sub(/.+\]/,"");print;exit}'
nginx-1.4.7
使用此结果汇总正确的下载网址,并使用wget
/ curl
进行下载。
这将确定最新版本的下载网址:
$ lynx -dump http://nginx.org/download/ | awk '/nginx-.*\.zip$/{url=$2}END{print url}'
http://nginx.org/download/nginx-1.5.9.zip
这取决于他们的网络服务器按日期排序目录列表(它目前正在进行)。
答案 2 :(得分:0)
如果可以使用第三方工具,这是使用多平台网络抓取CLI xidel 的另一个选项:
curl "http://nginx.org$( \
xidel 'http://nginx.org/en/download.html' \
-e '(//a[matches(@href, "/download/nginx-.+\.tar\.gz$")])[2]/@href' \
)" -O
该命令使用XPath表达式来提取感兴趣的URL;这里的假设是页面上的第二 /download/nginx-*.tar.gz
链接是 stable 版本(第一个代表主线版本)。
这不是最强大的方法,但这是刮取不是为程序化消费而设计的网页的固有问题。
答案 3 :(得分:0)
在https://drupal.stackexchange.com/a/23701
找到了它wget http://lftp.yar.ru/ftp/$(wget -O- http://lftp.yar.ru/ftp/ | egrep -o 'lftp-[0-9\.]+.tar.gz' | sort -V | tail -1)
可能是一个更简单的解决方案
答案 4 :(得分:0)
获取最新的nginx和naxsi版本,不需要排序,但需要jq。
latestNginx=$(curl -s http://hg.nginx.org/nginx/tags |
grep "^ *release-" | head -1 | cut -c 9-)
latestNaxsi=$(curl -s https://api.github.com/repos/nbs-system/naxsi/releases |
jq -r .[].tag_name | grep -v rc | head -1)
答案 5 :(得分:0)
这是获取和下载最新稳定版nginx的另一个简短解决方案:
这已在Linux环境中进行了测试,可能无法在MacOS上运行
用 Mainline 替换 Stable 以获得最新的主线版本
curl "http://nginx.org$(curl -s http://nginx.org/en/download.html | grep -oP 'Stable version.*?\K(/download/.*?tar.gz)')" --output nginx-stable.tar.gz
答案 6 :(得分:0)
能够使用相同的方法编写脚本,也无需任何特殊要求即可下载最新的当前/稳定节点版本。
下载最新的LTS节点版本:
latestLTSNode=$(curl -s https://nodejs.org/en/download/ | grep -E "Latest LTS Version: <strong>[[:digit:]]+.[[:digit:]]+.[[:digit:]]+"|grep -oE "[[:digit:]]+.[[:digit:]]+.[[:digit:]]+"| head -n1) ; nodejs_url="https://nodejs.org/dist/v${latestLTSNode}/node-v${latestLTSNode}-linux-x64.tar.xz"; wget ${nodejs_url} ; filename=$(basename $nodejs_url); filefolder=$(echo $filename | sed 's|.tar.xz||g') ;
下载最新的当前节点版本:
latestCurrentNode=$(curl -s https://nodejs.org/en/download/current/ | grep -E "Latest Current Version: <strong>[[:digit:]]+.[[:digit:]]+.[[:digit:]]+"|grep -oE "[[:digit:]]+.[[:digit:]]+.[[:digit:]]+"| head -n1) ; nodejs_url="https://nodejs.org/dist/v${latestCurrentNode}/node-v${latestCurrentNode}-linux-x64.tar.xz"; wget ${nodejs_url} ; filename=$(basename $nodejs_url); filefolder=$(echo $filename | sed 's|.tar.xz||g') ;