我发现我可以使用qsh对IBM i(as400)对象运行unix命令。 我想在IBM i qsh中使用ls将对象列表流式传输到ifs上的文件。这可行,但是输出似乎在EBCDIC中,并且不太可读。有没有办法转换为ASCII?
ls -ails /QSYS.LIB/ERP.LIB > all_ERP_files.txt
答案 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(由qsh
或strqsh
调用)在EBCDIC中运行,因此至少可以使用两种解决方法:
要调用PASE Shell(而不是Qshell),请在CL命令提示符下执行CALL QP2TERM
。从那里可以使用大多数相同的Unix样式的命令,除了shell以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。