JP1/Advanced Shell
UNIX互換コマンド,OSが提供するコマンドおよびユーザーが独自に作成したプログラムなど,ジョブ定義スクリプトの組み込みコマンド以外のプログラムを外部コマンドといいます。ジョブ定義スクリプト中にこれらをコマンド名として記述することで,外部コマンドを実行できます。外部コマンドの指定方法を次に示します。
$ 外部コマンドのパス
- <この項の構成>
- (1) Windowsでの外部コマンドの実行
- (2) UNIXでの外部コマンドの実行
- (3) コマンドの実行方法の比較
(1) Windowsでの外部コマンドの実行
Windowsの場合,「.com」,「.exe」,「.cmd」,「.bat」の実行ファイルのときは,ジョブ定義スクリプトから実行できます。ただし,環境変数PATHEXTに上記の拡張子を登録しておくと,拡張子を指定しなくてもジョブ定義スクリプトから実行できます。ジョブ定義スクリプトから外部コマンドを実行する場合,シェル変数PATHEXTに登録されている拡張子の順番で実行されます。例えば,シェル変数PATHEXTの値が「.COM;.EXE;」の場合に「ls.com」と「ls.exe」がシェル変数PATHの示す場所にあるときは,「ls.com」が実行されます。
外部コマンドの検索例を次に示します。PATHEXTの値が.COM;.EXE;である場合,次のように実行されます。
ls ←拡張子がないため,「.com」「.exe」の順に拡張子を付与して検索し実行される。 ls.exe ←拡張子があるため,「ls.exe」が実行される。Windowsの場合,外部コマンドを実行する前に,外部コマンドのパス,およびその引数に対して次の処理を行います。
- "(ダブルクォーテーション)の前の「\」を「\\」に変換する処理
- "(ダブルクォーテーション)の前に「\」を付与する処理
- "(ダブルクォーテーション)で囲む処理
(2) UNIXでの外部コマンドの実行
実行権限が付与された実行形式のバイナリファイルのときは,ジョブ定義スクリプトから実行できます。
また,実行権限の付与されたテキストファイルは,ファイルの先頭に「#!実行プログラムパス」を記述することで,ジョブ定義スクリプトから実行できます。この場合,#!の指定に従って実行プログラムが実行されます。
(3) コマンドの実行方法の比較
ジョブコントローラが,ジョブ定義スクリプトに指定されたファイルを実行する順序は,次のようになります。
- 【Windows限定】
- 環境ファイルのCHILDJOB_SHEBANGパラメーターで定義した条件を満たすファイルの場合,子孫ジョブとして実行します。
- 順序1でない場合,拡張子がexe,bat,cmd,またはcomのファイルのときは,コマンドとして実行します。
- 順序1〜2のどちらでもない場合,コマンドの起動に失敗して続行可能なエラーになります。
- 【UNIX限定】
- 指定されたファイルが実行権限のあるバイナリファイルの場合,コマンドとして実行します。
- Linuxでかつ順序1でない場合,環境ファイルのCHILDJOB_SHEBANGパラメーターで定義した条件を満たす実行権限のあるファイルのときは,子孫ジョブとして実行します。
- 順序1,2のどちらでもない場合,実行権限のあるテキストファイルのときは,#!に指定した実行プログラムで実行します。#!の指定がないときは「/bin/sh」で実行されます。
- 順序1〜3のどれでもない場合,コマンドの起動に失敗して続行可能なエラーになります。
コマンドの実行方法の比較を,WindowsとUNIXに分けて次の表に示します。表内の「順序」の欄が,上記の順序の番号に対応します。
表5-19 コマンドの実行方法の比較【Windows限定】
順序 ファイルの種類 動作 1. 環境ファイルのCHILDJOB_SHEBANGパラメーターで指定された条件を満たすファイル 子孫ジョブとして実行します。 2. 拡張子がexe,bat,cmd,またはcomのファイル コマンドとして実行します。 3. 順序1〜2以外 続行可能エラーとなります。 表5-20 コマンドの実行方法の比較【UNIX限定】
順序 ファイルの種類 動作 1. 実行権限のあるバイナリファイル コマンドとして実行します。 2. Linuxでかつ環境ファイルのCHILDJOB_SHEBANGパラメーターで指定された条件を満たす実行権限のあるファイル 子孫ジョブとして実行します。 3. 実行権限のあるテキストファイル #!で指定したプログラムで起動します。
#!がないときは,「/bin/sh」で起動します。4. 順序1〜3以外 続行可能エラーとなります。
All Rights Reserved. Copyright (C) 2011, 2012, Hitachi, Ltd.