Informatica IPC环境UNIX trailer生成脚本报exit code 126问题咨询
错误原因定位
Exit code 126为Shell标准错误码,对应三类触发原因:
- 可执行文件权限不足:Informatica运行用户无
$PMRootDir/scripts/exec_trailer_unix.sh的执行权限,或无目标文件目录$PMRootDir/TgtFiles的读写权限 - 语法兼容问题:MacOS默认的
/bin/sh实际软链接到Bash,支持Bash扩展语法,而Informatica IPC环境的/bin/sh为纯POSIX兼容Shell,不支持你脚本中用到的"0"{1..8}大括号扩展语法,执行时触发报错 - 路径解析异常:调用上下文未正确加载
$PMRootDir环境变量,或待统计的body.txt文件不存在、无读权限
修复步骤
1. 权限修复
执行以下命令为脚本添加可执行权限,同时确认Informatica运行用户对脚本目录、目标文件目录有对应读写权限:
chmod +x $PMRootDir/scripts/exec_trailer_unix.sh
2. 脚本内容修改
替换非POSIX兼容语法,同时简化trailer生成逻辑,适配所有UNIX环境:
#!/bin/sh TgtFiles=$1 TgtFilesBody=$TgtFiles/body.txt TgtFilesTrailer=$TgtFiles/trailer.txt # 统计文件行数,兼容POSIX标准,避免sed不同版本差异 string1=$(wc -l < "$TgtFilesBody" | tr -d ' ') # 生成前缀:T + 7位左补零的行数 prefix=$(printf "T%07d" "$string1") # 生成32位总长度的trailer,剩余位补0(可根据实际需要调整总长度) trailer=$(printf "%-32s" "$prefix" | tr ' ' '0') # 输出到文件 echo "$trailer" > "$TgtFilesTrailer"
3. 调用命令优化
去掉不必要的sh -c封装,直接调用脚本即可,避免额外的Shell嵌套兼容问题:
$PMRootDir/scripts/exec_trailer_unix.sh $PMRootDir/TgtFiles
验证说明
修改后生成的trailer完全符合需求:固定T为开头,后接7位左补零的行数,剩余位补0,总长度与你给出的示例一致。
内容的提问来源于stack exchange,提问作者Fer
相关产品推荐
相关产品推荐

