Как писать длинные команды оболочки z / OS UNIX в BPXBATCH - PullRequest
0 голосов
/ 15 мая 2018

Я собираюсь описать мою проблему как можно лучше.

Я заранее знаю, что можно набрать команду UNIX оболочки z / OS, которая не помещается в одну строку, используя обратную косую черту вконец первой строки.На самом деле я проверил это на компьютере, с которым я работаю и работает хорошо.

Например;чтобы выполнить тест, я набрал команду ls следующим образом:

Сначала без обратной косой черты из командной строки:

ls -la

После с обратной косой чертой также из командной строки:

ls\
 -la

Я получаю такие же хорошие результаты

Я хотел бы знать, как сделать то же самое в сценарии оболочки z / z UNIX в STDIN, выполняемом с BPXBATCH.

ЕслиЯ поставил команду следующим образом: ls -la, она хорошо выполняется;но если я попытаюсь разбить его на две строки, это не сработает.

Может кто-нибудь пролить свет на этот вопрос?.

За много раз заранее

(Obvioulsy * 1023)* это очень простой пример, предназначенный только для того, чтобы показать проблему, с которой я столкнулся; реальные команды намного больше)

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Я сделаю это. Используя BPXBATCH, вы хотите выполнить команду оболочки. Вот простой пример:

//TSTRADMB  JOB  MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID,REGION=0M
//BPXIT EXEC PGM=BPXBATCH,PARM='SH ls -l'
//BPXPRINT DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*

Это дает желаемый эффект записи вывода команды оболочки ls -l в стандартный вывод. Но - что, если это намного более длинная строка? Два пути вы могли бы пойти. Можно было бы написать скрипт-обертку и вызвать его из BPXBATCH (что я и сделал бы). Другой - поместить PARM в несколько строк, и в этом случае вам необходимо следовать правилам JCL для продолжения (использование + в столбце 72 работает), например,

//TSTRADMB  JOB  MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID,REGION=0M
//BPXIT EXEC PGM=BPXBATCH,PARM='SH ls -l "/u/tstradm/ThisIsAReallyLongD+
//             irectoryThatCrossesMultipleLines"'
//BPXPRINT DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*

Интервалы с JCL действительно раздражают, поэтому вы должны сделать это правильно. Знак + должен находиться в столбце 72, иначе вы получите ошибку JCL. Начало следующей строки текста начинается в столбце 16. Запустите его поздно, и в итоге вы получите пробелы (что в этом случае будет иметь значение).

0 голосов
/ 28 июня 2018

Для передачи длинных команд в BPXBATCH используйте STDPARM DD.

Хотя можно передать команды относительно длиной в BPXBATCH через параметр PARM в операторе JCL EXEC с помощью правил продолжения JCL, этот метод по-прежнему ограничен 100 байтами.

Файл параметров, передаваемый в BPXBATCH через STDPARM, поддерживает параметры (то есть команду) длиной до 64 КБ. Файл параметров может быть файлом z / OS-Unix, традиционным набором данных z / OS или входящим потоком в JCL.

Например, поместите длинную команду (это пример команды 105 байт):

SH ls -altr /listed_environments/cics/test/pickup/webs/test-portal-v01/src/assets/mixins | grep functions

в файл z / OS-Unix по адресу /u/userid/stdparmfile

Затем выполните команду через BPXBATCH, используя STDPARM (PATHOPTS должен быть установлен в ORDONLY):

//USSCMD EXEC PGM=BPXBATCH
//STDERR  DD SYSOUT=*
//STDOUT  DD SYSOUT=*
//STDPARM DD PATH='/u/userid/stdparmfile',PATHOPTS=ORDONLY
/*
//

Или поместите эту же команду в традиционный набор данных z / OS (с достаточным LRECL). Убедитесь, что порядковые номера удалены из набора данных, введя UNNUM и / или NUMBER OFF в режиме РЕДАКТИРОВАНИЯ ISPF. Затем аналогичным образом отправьте через JCL:

//USSCMD EXEC PGM=BPXBATCH
//STDERR  DD SYSOUT=*
//STDOUT  DD SYSOUT=*
//STDPARM DD DISP=SHR,DSN=USERID.STDPARM.TEST
/*
//

Подача в потоке на STDPARM DD немного более ограничительна, так как символ пробела предполагается на каждом конце строки. Команда in-stream должна подойти, если она может быть разбита на границы пространства-символа, чтобы соответствовать 80-байтовому пределу для JCL. Пример команды, которую мы использовали здесь, будет работать так:

//USSCMD EXEC PGM=BPXBATCH
//STDERR  DD SYSOUT=*
//STDOUT  DD SYSOUT=*
//STDPARM DD *
SH ls -altr
/listed_environments/cics/test/pickup/webs/test-portal-v01/src/assets/mixins
| grep functions
/*
//

Но команда с непрерывной текстовой строкой> 80 байт, вероятно, создаст проблемы для in-stream.

Документацию z / OS 2.3 для STDPARM можно найти здесь: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.bpxa400/batstdparm.htm

0 голосов
/ 25 мая 2018

В BPXBATCH вы на самом деле хотите использовать «+» в качестве символа продолжения для STDIN.BPXBATCH - это командный процессор TSO, поэтому он использует символ продолжения TSO, а не USS '

...