Bash脚本读取XML文件致DYMO打印服务XML验证失败
解决Bash读取XML文件发送DYMO打印服务报错问题
核心问题
直接用$(cat)或普通方式读取XML文件到变量时,Bash会自动替换换行符为空格,同时解析XML中的特殊字符(如双引号、反斜杠),导致XML结构被破坏,DYMO服务验证失败。而手动赋值时你刻意保留了完整格式,所以能正常打印。
可行解决方案
1. 用read命令完整读取文件(保留所有格式)
使用read的特殊选项读取整个XML文件,确保换行、空格和特殊字符完全保留:
# 读取整个XML文件到变量,保留原始格式 IFS= read -r -d '' labelContent < your-label.xml # 发送打印请求 curl -X POST \ -H "Content-Type: application/xml" \ -d "$labelContent" \ http://your-dymo-service-url
IFS=:防止文件开头的空格被截断-r:禁止反斜杠被解析为转义字符-d '':以空字符作为读取结束标记,确保读取到文件末尾
2. 让curl直接读取文件(最稳妥,跳过变量中转)
curl支持直接读取文件作为POST数据,完全避免shell变量处理带来的格式问题:
curl -X POST \ -H "Content-Type: application/xml" \ --data-binary @your-label.xml \ http://your-dymo-service-url
--data-binary @filename:会原封不动发送文件内容,包括所有换行、特殊字符,不会被shell修改
3. 修复文件格式问题(如果是隐形字符导致)
如果XML文件带有Windows换行符(CRLF)或编码错误,也会触发验证失败:
- 转成Unix换行符:
dos2unix your-label.xml
- 检查并转换编码为UTF-8:
# 查看文件编码 file -i your-label.xml # 转换为UTF-8(假设原编码是ISO-8859-1) iconv -f ISO-8859-1 -t UTF-8 your-label.xml > fixed-label.xml
内容的提问来源于stack exchange,提问作者dirkvranckaert
相关产品推荐
相关产品推荐

