我有一个脚本,可以使用wget命令下载slack,因为该脚本在每次配置计算机时都运行,因此我需要始终下载最新版本的slack。
我在debian9中工作
我现在正在做
wget https://downloads.slack-edge.com/linux_releases/slack-desktop-3.3.7-amd64.deb
我尝试过:
curl -s https://slack.com/intl/es/release-notes/linux | grep "<h2>Slack" | head -1 | sed 's/[<h2>/]//g' | sed 's/[a-z A-Z]//g' | sed "s/ //g"
此返回:3.3.7
将此添加到:wget https://downloads.slack-edge.com/linux_releases/slack-desktop-$curl-amd64.deb
并且不起作用。
您知道为什么这行不通吗?
答案 0 :(得分:0)
您的脚本生成的字符串很长,带有很多前导空格。
bash$ curl -s https://slack.com/intl/es/release-notes/linux |
> grep "<h2>Slack" | head -1 |
> sed 's/[<h2>/]//g' | sed 's/[a-z A-Z]//g' | sed "s/ //g"
3.3.7
您希望字符串不带空格,并且可以大大简化冗长的管道。
barh$ curl -s https://slack.com/intl/es/release-notes/linux |
> sed -n "/^.*<h2>Slack /{;s///;s/[^0-9.].*//p;q;}"
3.3.7
还请注意,字符类[<h2>/]
完全不代表您的想法。它与<
或h
或2
或>
或/
的单个字符匹配,与上下文无关。因此,例如,如果当前版本号包含数字2,您也将使用该数字。
但是,这样的抓取非常脆弱。我注意到,如果将URL中的/es/
更改为/en/
,则根本没有输出。也许您可以找到一种更好的方式来获取最新版本(使用apt
应该允许您安装最新版本而无需编写任何脚本)。
答案 1 :(得分:0)
echo wget "https://downloads.slack-edge.com/linux_releases/slack-desktop-$(curl -s "https://slack.com/intl/es/release-notes/linux" | xmllint --html --xpath '//h2' - 2>/dev/null | head -n1 | sed 's/<h2>//;s#</h2>##;s/Slack //')-amd64.deb"
将输出:
wget https://downloads.slack-edge.com/linux_releases/slack-desktop-3.3.7-amd64.deb
我使用xmllint解析html并提取<h2>
标签之间的第一部分。然后使用sed
进行删除,我会收到最新版本。
@edit:
请注意,您可以仅从站点grep <h2>
来获取版本,只需使用以下命令即可进行版本:
curl -s "https://slack.com/intl/es/release-notes/linux" | grep -m1 "<h2>" | cut -d' ' -f2 | cut -d'<' -f1