z/OS下用bpxwunix执行SFTP报FSUM7332:需换行符
解决REXX生成SFTP批处理文件的语法错误问题
问题场景
用REXX编写SFTP批处理文件,通过address syscall writefile生成命令脚本,再用bpxwunix调用sftp -b batchfile userid@host执行,代码如下:
stdin = workdir'/'sysvar('sysuid')'.sftp.stdin' out.1 = 'put' workdir'/'filename out.2 = 'quit' out.0 = 2 address syscall 'writefile (stdin) 700 out.'
执行时触发错误:
sftp 1216: FSUM7332 syntax error: got ), expecting Newline
尝试在每行末尾添加'25'x未解决问题。
问题原因
z/OS UNIX环境下,SFTP的批处理文件要求每个命令以**UNIX风格换行符(X'0A')**结尾,你添加的'25'x是回车符(CR),并非UNIX系统识别的行结束符。writefile写入stem变量时不会自动添加换行,导致所有命令被合并成一行,SFTP解析时出现语法错误。
解决方案
修改代码,在每个命令行末尾添加UNIX换行符X'0A',修改后的代码如下:
stdin = workdir'/'sysvar('sysuid')'.sftp.stdin' out.1 = 'put' workdir'/'filename || X'0A' out.2 = 'quit' || X'0A' out.0 = 2 address syscall 'writefile (stdin) 700 out.'
替代方案
如果需要兼容字符集转换,也可以用stream命令的lineout方法生成文件,它会自动处理正确的行结束符:
stdin = workdir'/'sysvar('sysuid')'.sftp.stdin' "touch" stdin // 创建文件 "chmod 700" stdin // 设置权限 call lineout stdin, 'put' workdir'/'filename call lineout stdin, 'quit' call lineout stdin // 关闭文件
内容的提问来源于stack exchange,提问作者Lionel B Dyck
相关产品推荐
相关产品推荐

