PASEシェルAPIの使用方法について

これまで、活動化グループを分けてまで、CL実行することが無いため、同一活動化グループで実行される、QP2SEHLL2を盲目的に使用してきた。
しかし、QP2SEHLL2 QP2SEHLL sh -sh 等が、意思がなく使用されている様に見受けられる、CLLE記述を見てしまったので、整理整頓と自身の備忘録の意味を込めて。

IBM i の PASE SHELL 起動 API

詳細は 「IBM Knowledge Center V7R2 QP2SHELL() を使用した IBM PASE for i プログラムの実行」 を参照下さい。

実行されるのはコーン・シェル。
実態は /QOpenSys/usr/bin/sh../../QIBM/ProdData/OS400/PASE/bin/ksh へのシンボリックリンク。

以下は、シェルの起動プログラムの種類。
- QP2TERM(対話式シェル)
- QP2SHELL(新しい活動化グループを作成し実行する)
- QP2SHELL2(呼び出し元の活動化グループ内で実行する)

QP2SHELL2は、同一活動化グループで実行されるため、5250対話式のコマンド・ラインで実行すると、STDOUTと対話式プログラムの出力とが重複している形になり、何も表示されない?
CLLEで活動化グループが、新たに作成される場合は、もちろん出力される。
CLLE内では、OVRXXXなどのスコープが、活動化グループ内(*ACTGRPDFN)だったりすると、QP2SHELL2は影響を受け、QP2SHELL受けない。

使用例

CALL PGM(QP2TERM  ) PARM('/QOpenSys/usr/bin/sh' '-c' 'echo $PATH') 
CALL PGM(QP2SHELL ) PARM('/QOpenSys/usr/bin/sh' '-c' 'echo $PATH') 
CALL PGM(QP2SHELL2) PARM('/QOpenSys/usr/bin/sh' '-c' 'echo $PATH') 

環境変数について

以下の様に、PASEシェルでコマンドを実行することが可能だが、sh-shで起動時の環境変数に違いがある。

WRKENVVAR , ADDENVVAR コマンドで設定済みのILE環境変数は、QP2TERM,QP2SHELL,QP2SEHLL2sh,-shの組合せがどのパターンでも引き継がれる。

  • /QOpenSys/usr/bin/sh(環境変数がシステムの初期値になる)
  • /QOpenSys/usr/bin/-sh(環境変数がユーザーの初期値になる。※起動時に.profileが実行される)

使用例

CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh'  '-c' 'echo $PATH') 
CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/-sh' '-c' 'echo $PATH') 

kshのオプション

AIXを参考にすると、PASEのkshも基本的には、以下のオプションが使用可能だと思われる。
IBM Knowledge Center AIX 7.2 kshコマンド

  • -c : コマンドの実行
  • -v : 出力を表示
  • -x : コマンドと引数を表示
CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh'  '-cvx' 'echo $PATH')