список объектов в файле ifs с использованием Unix ls в IBM i qsh - PullRequest
0 голосов
/ 23 сентября 2018

Я обнаружил, что могу использовать qsh для запуска команд unix против объектов IBM i (as400).Я хочу передать список объектов в файл при использовании ls в IBM i qsh.Это работает, но вывод, кажется, в EBCDIC и не очень читабелен.Есть ли способ конвертировать в ASCII?

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

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Так как Qshell (вызывается qsh или strqsh) работает в EBCDIC, есть по крайней мере несколько способов, которые вы можете использовать:

  1. Попробуйте выполнить ту же команду вPASE.

Чтобы вызвать оболочку PASE (а не Qshell), выполните CALL QP2TERM из командной строки CL.Оттуда доступно большинство таких же команд в стиле Unix, за исключением того, что оболочка явно работает в ASCII.

Преобразование файла потока в ASCII после факта.

Помимо предложения @jmarkmurphy, вы также можете использовать команду CPY в CL:

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

В приведенном выше тексте замените &STMF на имя файла потока, который вы пытаетесь преобразовать.CCSID 819 - латиница-1;Вы можете использовать все, что вам больше подходит.

0 голосов
/ 24 сентября 2018

Чтобы другие могли помочь в будущих поисках: преобразование в ASCII, скорее всего, необходимо при передаче данных из IBM i.

FTP-сервер IBM i на лету преобразует EBDIC в ASCII Latin1, когда нет передача двоичного файла.Необходим режим ASCII.

Для получения дополнительной информации см. PDF для поддержки FTP от IBM .

0 голосов
/ 24 сентября 2018

Вы правы, просто перенаправив вывод ls в qsh, вы получите EBCDIC.Но вы можете передать этот вывод через iconv, чтобы преобразовать его в utf-8 следующим образом:

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

То, что -f37 принимает CCSID США (это мое).При необходимости вы можете заменить его своим, чтобы получить лучшее преобразование.

Учитывая ответ Джона, я попытался использовать PASE call qp2term, и когда я это сделал, мне не нужно было передавать вывод через iconvфайл был создан в CCSID 819.


Для общего сообщества Unix qsh - это оболочка типа Unix на платформе IBM i, ibm-midrange.Эта платформа использует EBCDIC, а не ASCII, как другие Unixes.

...