@@ -1086,7 +1086,10 @@ get_windows_iso_link() {
10861086 if [ -n " $label_msdl " ]; then
10871087 iso=$( curl -L " $page_url " | grep -ioP ' https://[^ ]+?#[0-9]+' | head -1 | grep .)
10881088 else
1089- curl -L " $page_url " | grep -ioP ' https://[^ ]+?.(iso|img)' > $tmp /win.list
1089+ curl -L " $page_url " |
1090+ tr -d ' \n' | sed -e ' s,<a ,\n<a ,g' -e ' s,</a>,</a>\n,g' | # 使每个 <a></a> 占一行
1091+ grep -Ei ' \.(iso|img)</a>$' | # 找出是 iso 或 img 的行
1092+ sed -E ' s,<a href="([^"]+)".+>(.+)</a>,\2 \1,' > $tmp /win.list # 提取文件名和链接
10901093
10911094 # 如果不是 ltsc ,应该先去除 ltsc 链接,否则最终链接有 ltsc 的
10921095 # 例如查找 windows 10 iot enterprise,会得到
@@ -1104,10 +1107,14 @@ get_windows_iso_link() {
11041107}
11051108
11061109get_shortest_line () {
1107- # awk '{print length($0), $0}' | sort -n | head -1 | awk '{print $2}'
11081110 awk ' (NR == 1 || length($0) < length(shortest)) { shortest = $0 } END { print shortest }'
11091111}
11101112
1113+ get_shortest_line_by_field () {
1114+ local field=$1
1115+ awk " (NR == 1 || length(\$ $field ) < length(field)) { line = \$ 0; field = \$ $field } END { print line }"
1116+ }
1117+
11111118get_windows_iso_link_inner () {
11121119 regexs=()
11131120
@@ -1139,7 +1146,9 @@ get_windows_iso_link_inner() {
11391146 regex=${regex// / _}
11401147
11411148 echo " looking for: $regex " >&2
1142- if iso=$( grep -Ei " /$regex " " $tmp /win.list" | get_shortest_line | grep .) ; then
1149+ if line=$( grep -Ei " ^$regex " " $tmp /win.list" | get_shortest_line_by_field 1 | grep .) &&
1150+ iso=$( awk ' {print $2}' <<< " $line" | grep .) ; then
1151+ echo " Selected: $line " >&2
11431152 return
11441153 fi
11451154 done
@@ -1512,7 +1521,9 @@ Continue?
15121521 }
15131522
15141523 setos_windows () {
1524+ auto_find_iso=false
15151525 if [ -z " $iso " ]; then
1526+ auto_find_iso=true
15161527 # 查找时将 windows longhorn serverdatacenter 改成 windows server 2008 serverdatacenter
15171528 image_name=${image_name/ windows longhorn server/ windows server 2008 server}
15181529 echo " iso url is not set. Attempting to find it automatically."
@@ -1527,27 +1538,32 @@ Continue?
15271538 if [[ " $iso " = magnet:* ]]; then
15281539 : # 不测试磁力链接
15291540 else
1530- # 需要用户输入 massgrave.dev 直链
1531- if grep -Eiq ' \.massgrave\.dev/.*\.(iso|img)$' <<< " $iso" ||
1532- grep -Eiq ' \.gravesoft\.dev/#[0-9]+$' <<< " $iso" ; then
1533- info " Set Direct link"
1534- # MobaXterm 不支持
1535- # printf '\e]8;;http://example.com\e\\This is a link\e]8;;\e\\\n'
1536-
1537- # MobaXterm 不显示为超链接
1538- # info false "请在浏览器中打开 $iso 获取直链并粘贴到这里。"
1539- # info false "Please open $iso in browser to get the direct link and paste it here."
1540-
1541- echo " 请在浏览器中打开 $iso 获取直链并粘贴到这里。"
1542- echo " Please open $iso in browser to get the direct link and paste it here."
1543- IFS= read -r -p " Direct Link: " iso
1544- if [ -z " $iso " ]; then
1545- error_and_exit " ISO Link is empty."
1541+ iso_is_tested=false
1542+ if $auto_find_iso ; then
1543+ if test_url_grace " $iso " iso 2> /dev/null; then
1544+ iso_is_tested=true
1545+ else
1546+ # 需要用户输入 massgrave.dev 直链
1547+ info " Set Direct link"
1548+ # MobaXterm 不支持
1549+ # printf '\e]8;;http://example.com\e\\This is a link\e]8;;\e\\\n'
1550+
1551+ # MobaXterm 不显示为超链接
1552+ # info false "请在浏览器中打开 $iso 获取直链并粘贴到这里。"
1553+ # info false "Please open $iso in browser to get the direct link and paste it here."
1554+
1555+ echo " 请在浏览器中打开 $iso 获取直链并粘贴到这里。"
1556+ echo " Please open $iso in browser to get the direct link and paste it here."
1557+ IFS= read -r -p " Direct Link: " iso
1558+ if [ -z " $iso " ]; then
1559+ error_and_exit " ISO Link is empty."
1560+ fi
15461561 fi
15471562 fi
15481563
1549- # 测试是否是 iso
1550- test_url " $iso " iso
1564+ if ! $iso_is_tested ; then
1565+ test_url " $iso " iso
1566+ fi
15511567
15521568 # 判断 iso 架构是否兼容
15531569 # https://gitlab.com/libosinfo/osinfo-db/-/tree/main/data/os/microsoft.com?ref_type=heads
0 commit comments