自动下载最新版本的Slack

时间:2019-02-12 08:08:41

标签: linux bash wget

我有一个脚本,可以使用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

并且不起作用。

您知道为什么这行不通吗?

2 个答案:

答案 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>/]完全不代表您的想法。它与<h2>/的单个字符匹配,与上下文无关。因此,例如,如果当前版本号包含数字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