CRLF行结束符问题
背景
别人搭建了一个服务,让我下载静态资源,现在我需要把页面上的所有静态资源下载下来,本来想着直接让同事给我从服务器上打个包得了,但是秉持着自己动手丰衣足食的想法。。。算了不扯淡,那个同事是我领导。。。领导最近火气大,能不靠近就不靠近。。。自己十来分钟写个脚本扒拉下来得了,但是,本以为很简单的操作,却出现了问题,先看一下那个页面长什么样子

其实就是类似用nginx做了个代理,或者python3 -m http.server port
执行脚本环境:macos
我的错误做法
#!/bin/bash
# $1 glb_list
# $2 result_dir
# $3 urlprefix
mkdir -p ./glbs_dir/$2
while IFS= read -r line
donew_url=$3$fileecho "$new_url"curl -o "./glbs_dir/$2/$line" "$new_url"#echo "$3$line"#echo "./glbs_dir/$2/$line"
done < $1
# 这段代码放在mac上执行,下载出来的文件放到linux上结尾会带有\r下载出来的文件,在mac上看着很正常,但是放到服务器(centos)上,执行ll文件末尾会出现?问号,执行ls -lb 文件末尾会出现\r,这样我在服务器上操作这些静态资源就会出现问题
错误原因
在macOS上,某些工具可能会在文本文件中保留Windows风格的CRLF(\r\n),而Linux使用LF(\n)。当在macOS上读取文件时,read -r line 会包含结尾的\r字符。
解法
在读取文件时清理行结束符
#!/bin/bash
# $1 glb_list
# $2 result_dir
# $3 urlprefix
mkdir -p ./glbs_dir/$2
while IFS= read -r line
do# 移除可能的\r字符line=$(echo "$line" | tr -d '\r')new_url=$3$line # 这里也应该是$line而不是$fileecho "$new_url"curl -o "./glbs_dir/$2/$line" "$new_url"
done < $1