SAP命令行系统脚本执行报xsltproc找不到及couc变量赋值异常问题
问题原因
所有异常的核心诱因是脚本使用了Windows系统的CRLF(\r\n)换行符,而非Unix/Linux环境要求的LF(\n)换行符,行尾残留的\r不可见字符导致所有执行逻辑异常:
- 变量赋值异常:
couc=date +%y%m%d`` 实际得到的变量值为[日期]\r,尾部的\r会让输出时光标回到行首,导致变量值输出看起来异常;同时你脚本存在笔误,echo "&couc"中的&应该改为$才会输出变量值,否则只会输出固定字符串&couc。 - 输出格式错乱:你看到的
file2单独占一行、=开头的内容占下一行,就是echo "file2=$file2"输出时尾部\r导致的光标跳转效果。 - xsltproc报错:脚本中xsltproc命令传入的XML文件路径末尾被带上了
\r字符,系统会尝试查找名称末尾带不可见字符的文件,自然匹配不到已存在的正常文件,所以报加载实体失败的错误。 - 「command not found」报错:部分行的
\r字符会把单行命令拆分为多行,拆分出来的内容被系统识别为不存在的无效命令,就会触发该报错。
解决方案
- 转换脚本换行符格式
如果系统安装了dos2unix工具,直接执行:dos2unix /usr/sap/trans/command/myscript.sh
没有dos2unix的话用sed命令也可以完成转换:sed -i 's/\r$//' /usr/sap/trans/command/myscript.sh - 修正脚本笔误
把脚本中的echo "&couc"改为echo "$couc",即可正常输出couc变量的值。 - 可选优化配置
在脚本第一行添加shebang声明#!/bin/bash,然后给脚本加执行权限:chmod +x /usr/sap/trans/command/myscript.sh
后续可以直接用绝对路径/usr/sap/trans/command/myscript.sh调用脚本,无需每次前缀sh/bash。
修改完成后重新执行脚本即可恢复正常。
内容的提问来源于stack exchange,提问作者Eric Koralewski
相关产品推荐
相关产品推荐

