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

时间:2018-09-23 20:39:55

标签: unix ibm-midrange

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

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

3 个答案:

答案 0 :(得分:6)

您是正确的,只需在** (UndefinedFunctionError) function Guardian.Plug.EnsurePermissions.init/1 is undefined (module Guardian.Plug.EnsurePermissions is not available) 内重定向ls的输出即可获得EBCDIC。但是您可以通过以下方式通过qsh传递输出,将其转换为utf-8:

iconv

ls -ails /QSYS.LIB/ERP.LIB | iconv -f37 -t1208 > all_ERP_files.txt 假设使用美国CCSID(是我的)。如有必要,您可以将其替换为更好的转换。

考虑到约翰的回答,我尝试使用PASE -f37,这样做时,我不必通过call qp2term传递输出,该文件是在CCSID 819中创建的。


为了普及Unix社区,iconv是IBM i平台qsh上的Unix类型的shell。该平台使用EBCDIC而不是像其他Unix一样使用ASCII。

答案 1 :(得分:3)

由于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;您可以使用最适合自己的方式。

答案 2 :(得分:0)

为其他人提供将来的搜索帮助:从IBM i传输数据时,很有可能需要转换为ASCII。

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

有关更多信息,请参见此PDF for FTP Support from IBM