目录
项目背景
想把powercenter原来上的workflow迁到infa cloud(以下统称IDMC)上
发现问题
原来生产环境workflow中的command节点 里的脚本 放到IDMC上运行 就是跑不通 ,单独放到操作系统里跑就能跑通 ,日志如下:
解决思路
1.开始我看到这个日志,不理解 为什么会有 ‘\r’的出现
我开始排查提交的输入框里的文本
我把脚本内容放到notdpad++里 ,用LF ASCII编码格式查看 发现没什么问题 。
2.既然文本中看不出来 ,就去找实际IDMC里如何存储的
于是我把这个task导出来
发现了问题所在 实际保存了\r\n \r这是window的回车符 在linux上是行不通的 。
顿时灵光一现 ,变成一行不就行了!
3.发现出了新问题 ,说明之前的解决方向大体对了
双小括号属于语句特性,不一定所有都支持 同时对比一下版本信息。
迁移目标版本:
原项目版本
虚拟化和内核都不同 ,说明还是存在差异。
尝试更换if写法
把原来的 if then fi if then fi 换成了 if then elif then elif then fi
把原来的 if条件表达式的 (( E )) 换成了 [[ E ]]
最终成功了!!! 日志如下
最后总结
在IDMC的Pre-Processing Commands 里shell脚本 一定不能用回车换行 !!!这两个字符不管你用什么办法修改成LF ,最后它都会以Windows Ascii码形式(\r\n)提到后台。
当Linux运行整个命令时,就会抛出\r 命令不存在的问题。
当然把语句放到一个文件里,然后Pre-Processing Commands执行这个shell脚本(sh ****.sh)也是可行的。
至于脚本的语法修改是因为迁移平台系统版本不匹配导致 ,这就因项目而异了。
迁移时多检查,就会有解决问题的新思路!