在 IBM i qsh 中使用 Unix ls 将对象列表添加到 ifs 上的文件

list of objects to a file on ifs using Unix ls in IBM i qsh

我发现我可以对 IBM i (as400) 对象使用 qsh to 运行 unix 命令。 我想在 IBM i qsh 中使用 ls 将对象列表流式传输到 ifs 上的文件。这有效,但输出似乎是 EBCDIC 格式,可读性不强。有没有办法转换成 ASCII?

ls -ails /QSYS.LIB/ERP.LIB   >  all_ERP_files.txt

您是对的,只需在 qsh 中重定向 ls 的输出即可得到 EBCDIC。但是您可以通过 iconv 管道输出,将其转换为 utf-8,如下所示:

ls -ails /QSYS.LIB/ERP.LIB | iconv -f37 -t1208 > all_ERP_files.txt

-f37 假设美国 CCSID(那是我的)。如有必要,您可以将其替换为您的以获得更好的转换。

考虑到 John 的回答,我尝试使用 PASE call qp2term,当我这样做时,我不必通过 iconv 管道输出,文件是在 CCSID 819 中创建的。


对一般Unix社区的熏陶,qsh是IBM i平台上的Unix类型shell,ibm-midrange。该平台使用 EBCDIC 而不是像其他 Unix 一样使用 ASCII。

由于 Qshell(由 qshstrqsh 调用)在 EBCDIC 中运行,您至少可以使用几个解决方法:

  1. 尝试在 PASE 中执行相同的命令。

要调用 PASE shell(而不是 Qshell),请在 CL 命令提示符下执行 CALL QP2TERM。从那里,大多数相同的 Unix 风格的命令都可用,除了 shell 明确地以 ASCII 运行。

  1. 事后将流文件转换为 ASCII。

除了@jmarkmurphy 的建议外,您还可以在 CL 中使用 CPY 命令:

CPY &STMF TOOBJ(&STMF) TOCCSID(819) DTAFMT(*TEXT) REPLACE(*YES)

在上面,将 &STMF 替换为您要转换的流文件的名称。 CCSID 819 是 Latin-1;你可以使用最适合你的任何东西。

供其他人在以后的搜索中使用:从 IBM i 传输数据时,很可能需要转换为 ASCII。

IBM i FTP 服务器在 传输二进制文件时将 EBDIC 动态转换为 ASCII Latin1。模式 ASCII 是必需的。

有关详细信息,请参阅此 PDF for FTP Support from IBM