ここでは PASE
環境(UNIX
との互換の環境) のSHELL
コマンドの実行の方法と
IBM System i 上での zip圧縮の方法を API: QP2SHELL
を使って実現する方法を
一気に紹介しよう。
STRQSH コマンドで対話式で PASE
環境を起動して、SHELL
コマンドを実行する方法は
よく知られているがバッチで プログラムから SHELL
コマンドを簡単に起動する方法は
ほとんど紹介されていない。
何やら IBM が公開しているAPI: QP2SHELL
を使えばできそうではあるが
実際にやってみるとかなり骨が折れて容易には QP2SHELL API
は動作してくれない。
さらに同時に zip 圧縮の方法もここで紹介する。
System i で zip圧縮を実現するには OS Ver7.1 で ZIP のための API として
QzipZip, QzipUnzip
が提供されているが、PTF を適用しなければならない。
これも面倒な話で、一般的な方法とは言えない。
IBM System i で zip圧縮を実現するには、次の3つの方法がある。
-
1. GNU Zip を導入する。
- GNU サイトから System i 用の GNU Zip をダウンロードして導入する。
GNU サイトとは無償で公開されているフリー・ソフトのサイトである。
-
2. zlib を導入する
- PHP 用に公開されている zlib をダウンロードして導入する。
-
3. SHELL : jar コマンドを実行する
- SHELL コマンド: jar を実行して、 zip を作成する。
jar コマンドは一般的には jarファイルを生成するためのものであるが
jar ファイルとは zip ファイルそのものであるので
zip ファイルを作成するのに jar コマンドを利用することができる。
– 1.と 2. の場合はWebサイトよりダウンロードして導入する、というものでこれらは
やはり面倒な手続きを必要とするし、何より業務として使用するには OS のリリース・アップや
System i の入れ替え時にも再導入の必要が出てくるのは、心配の種が増えようというものである。
3. の jar コマンドを利用する方法は、
- ・ PASE 環境が導入されていること
- ・ Java が導入されていること
が、必要条件とはなるが今では OS V5R1M0
以降であればほとんどの System iでは PASE 環境も
Java も導入されているはずであるので問題はない、と予想できる。
3. の SHELL
コマンドを使う方法であれば、System i
に導入の必要が一切、ない。
問題はどのように SHELL
コマンドを使うか、そして zip圧縮を実現するか、である。
それをこの章で紹介していく。
【 TESTQSH: /ITSフォルダー以下のIFSファイルをすべて /TEST/ITS.zip
として圧縮するサンプル 】
0001.00 PGM 0002.00 /*---------------------------------------------------------*/ 0003.00 /* TESTQSH : ZIP 圧縮のテスト */ 0004.00 /*---------------------------------------------------------*/ 0005.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(80) 0006.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) 0007.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0008.00 0009.00 CALL PGM(QP2SHELL) PARM('/QOpenSys/bin/jar' 'cvf' + 0010.00 '/TEST/ITS.zip' '/ITS') 0011.00 RETURN 0012.00 0013.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) MSGID(&MSGID) 0014.00 SNDPGMMSG MSG(&MSGID *CAT '=' *CAT &MSG) + 0015.00 TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG) 0016.00 ENDPGM
【 解説 】
STRQSH による PASE 環境において /ITS 以下をまとめて /TEST/ITS.zip として zip圧縮するのであれば
jar cvf /TEST/ITZ.zip /ITS
のように実行すればよい。
jar コマンドに続く cvf は圧縮することを指示している。解凍であれば xvf を指示する。
つまり圧縮であれば、
jar cvf (圧縮先のファイル名) (圧縮する元のフォルダー名)
の形式である。
( jar コマンドの使用方法については、 http://msugai.fc2web.com/java/jar.html を参照のこと )
API: QP2SHELL の使用方法は
QP2SHELL(“SHELLコマンド”, “第1パラメータ”, “第2パラメータ”, …. )
という具合である。このことは API: QP2SHELL
のIBM の解説にはわかりやすい解説もないし、
例もないので 実際の実行に手間取ってしまうのである。
このように答えとしての方法を知ってしまえば zip圧縮は非常に簡単に実行することができる。
PTF や Webサイトからツールを導入するよりは、はるかに簡単に実現することができる。
【補足】 上記のプログラムは CCSID 5035 の環境において実行すること。