PASEシェルAPIの使用方法について
これまで、活動化グループを分けてまで、CL実行することが無いため、同一活動化グループで実行される、QP2SEHLL2
を盲目的に使用してきた。
しかし、QP2SEHLL2
QP2SEHLL
sh
-sh
等が、意思がなく使用されている様に見受けられる、CLLE記述を見てしまったので、整理整頓と自身の備忘録の意味を込めて。
IBM i の PASE SHELL 起動 API
詳細は 「IBM Knowledge Center V7R5 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,QP2SEHLL2
、sh,-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')