Chrome 离线包下载
是的,又是一个 Chrome 离线包下载页面。
DEMO: https://lab.skk.moe/chrome
短网址: https://git.io/Chrome (注意大小写)
首先不得不提一下 METO,他在他的博客里提到了 相关 API 和请求方法,这是获取 Chrome 离线包下载地址的关键。
但是看了一下他的 ChromeChecker,输出的 XML 都是把数据写在 XML 节点的属性里,解析起来太麻烦。而且,使用 AJAX 获取 XML 数据的方法,能不能兼容 IE8 还是一个问题。
如果要绕过 AJAX 获取数据,直接输出包含所有信息的 HTML 就行了。本着不把简单的问题复杂化,我决定继续用 bash 完成剩余的工作:先写一个 HTML 模板,之后用 sed
把数据填充到模板里。
把 HTML 模板和将数据填充到模板里的脚本丢进 Repo 里,然后在 Travis CI 上启用定时运行,实现 24 小时查询一次。
同样的,我也搞了一个 API,包含了版本号、HASH、下载地址:https://lab.skk.moe/chrome/api/chrome.xml
返回未压缩的数据用于开发,https://lab.skk.moe/chrome/api/chrome.min.xml
返回压缩的数据。这个 API 把数据写在节点里,而不是属性值里。
在这里顺便记下几个使用 bash 时遇到的坑和对应解决方案:
拼接字符和变量
直接怼一块就行了,就像这样
$ a=sukkaw
$ echo -e $a
sukkaw
$ echo -e $a"~meow~"
sukkaw~meow~
bash 计算数值
使用 $[]
是可以直接计算的:
$ echo -e $[1+2]
3
$ echo -e $[1-2]
-1
$ echo -e $[1*2]
2
但是 bash 里使用变量计算不支持计算小数,小数点和之后的内容会被直接抛弃,就像这样:
$ echo -e $[1/2]
0
而且,使用这种办法不能把计算结果传给一个变量,所以得借助 awk
帮忙:
$ a=$(awk 'BEGIN{printf "%.3f",('5'/'9')}')
$ echo -e $a
0.556
date 指定时区
这个还算简单,man
里面也有写,直接用 TZ=UTC-
就行。
$ TZ=UTC-9 date '+%Y-%m-%d %H:%M:%S'
2018-08-08 20:16:43
sed 替换字符串
sed
的文档介绍说可以用大部分字符作为分隔符,比如:
$ sed -i "s|a|b|g" a.txt
$ sed -i "s/a/b/g" a.txt
$ sed -i "s~a~b~g" a.txt
$ sed -i "s!a!b!g" a.txt
但是替换的字符串或者目标字符串不能带有和分隔符相同的字符,如果遇到了需要换掉分隔符。