QP2SHELL() を使用した IBM PASE for i プログラムの実行
QP2SHELL または QP2SHELL2 プログラムを使用して、PASE for i プログラムを、IBM i コマンドライン、および高レベル言語プログラム、バッチジョブ、または対話型ジョブから実行します。
これらのプログラムは、それを呼び出すジョブで PASE for i プログラムを実行します。 PASE for i プログラムの名前は、プログラムのパラメーターとして渡されます。
QP2SHELL() プログラムは、新しい活動化グループで PASE for i プログラムを実行します。 QP2SHELL2() プログラムは、呼び出し側の活動化グループで実行されます。
注: QP2SHELL プログラムも QP2SHELL2 プログラムも、信頼できる操作のためにほとんどのシェルが必要とする標準ストリームのための特別なセットアップを行いません (stdin、stdout、および stderr は、fork 可能なファイル記述子でなければなりません)。 したがって、シェルまたはシェル・スクリプトを実行するための追加のプログラミングと一緒に、QP2SHELL プログラムおよび QP2SHELL2 プログラムを実行する必要があります。 API プログラム QP2TERM または QSH CL コマンドを使用すれば、追加のプログラミングなしでシェル・スクリプトを実行することができます。
以下の例では、lsIBM i コマンド行から以下のコマンドを発行します。
call qp2shell parm('/QOpenSys/bin/ls' '/')CL 変数を使用して QP2SHELL() に値を渡す場合、変数はヌル終了でなければなりません。 たとえば、上のサンプルは次のような方法でコーディングする必要があります。
PGM DCL VAR(&CMD) TYPE(*CHAR) LEN(20) VALUE('/QOpenSys/bin/ls')
DCL VAR(&PARM1) TYPE(*CHAR) LEN(10) VALUE('/')
DCL VAR(&NULL) TYPE(*CHAR) LEN(1) VALUE(X'00')
CHGVAR VAR(&CMD) VALUE(&CMD *TCAT &NULL)
CHGVAR VAR(&PARM1) VALUE(&PARM1 *TCAT &NULL)
CALL PGM(QP2SHELL) PARM(&CMD &PARM1)
ENDIT:
ENDPGM