7.3.13 COMMAND_CONV_ARGパラメーター(コマンド実行時にジョブ定義スクリプト中の引数を変換する規則を定義する)
形式
#-adsh_conf COMMAND_CONV_ARG コマンド引数1 コマンド引数2
機能
ジョブ定義スクリプト中のシェル標準コマンド,シェル拡張コマンド,関数,スクリプト拡張コマンド,スクリプト予約語コマンド,外部コマンド,およびユーザープログラムの引数を変換する規則を定義します。
ジョブ定義スクリプトの実行時にコマンドの引数がコマンド引数1と完全一致する場合,コマンド引数2に変換します。コマンド引数1およびコマンド引数2は必ず指定します。
同じコマンド引数に異なる規則を定義した場合は,先に定義した規則が有効になります。
.(ドット)コマンド,および#-adsh_scriptコマンドに指定した外部スクリプトも,実行時に定義に合致していた場合,引数が変換されます。
変換結果は,KNAX6804-Iメッセージ,またはKNAX6806-Iメッセージでジョブ実行ログに出力します。
オペランド
- コマンド引数1 〜<任意文字列>((1〜247バイト))
変換前のコマンド引数を指定します。スペースを含むコマンド引数を指定する場合は,"(ダブルクォーテーション)で囲む必要があります。ただし,"で囲んだ値にスペース,タブ文字または空文字だけを指定できません。なお,次の文字は使用できません。
* ? < > | `(バッククォーテーション) $
コマンド引数1を指定しなかった場合,またはコマンド引数1に不当な値を指定した場合は,パラメーター解析時にエラー終了します。
- コマンド引数2 〜<任意文字列>((1〜247バイト))
変換後のコマンド引数を指定します。スペースを含むコマンド引数を指定する場合は,"(ダブルクォーテーション)で囲む必要があります。ただし,"で囲んだ値にスペース,タブ文字または空文字だけを指定できません。なお,次の文字は使用できません。
* ? < > | `(バッククォーテーション) $
コマンド引数2を指定しなかった場合,またはコマンド引数2に不当な値を指定した場合は,パラメーター解析時にエラー終了します。
注意事項
システム環境ファイルとジョブ環境ファイルの両方にこのパラメーターが定義されていた場合,両方の定義が有効になります。ただし,システム環境ファイルとジョブ環境ファイルの定義の合計が255個を超えた場合,エラーになります。
次の例のように,変換後のコマンド引数と後続のパラメーターの変換前のコマンド引数が同じ場合,規則に合致する引数を持つevalコマンドを実行すると,evalコマンド実行時とその引数のコマンドの実行時とで,2回の変換が実行されます。
(例)
環境ファイルの内容
#-adsh_conf COMMAND_CONV_ARG /tmp /var/tmp ←1. #-adsh_conf COMMAND_CONV_ARG /var/tmp /jp1as/tmp ←2.
ジョブ定義スクリプトの内容
eval cd /tmp
この場合,環境ファイルのそれぞれの行で次のように変換されます。
evalコマンドが実行され,「/tmp」が「/var/tmp」に変換される。
cdコマンドが実行され,「/var/tmp」が「/jp1as/tmp」に変換される。
このパラメーターの変換後の引数に,文字列区切りであるIFSシェル変数と一致する文字が含まれた場合でも,変換後の引数は1つの文字列の引数として解釈されます。そのため,パラメーターの変換結果の文字列にメタキャラクタが含まれていて,実行するコマンドがevalコマンド以外の場合,その文字はメタキャラクタではなく一般的な文字として扱われます。
環境ファイルの内容(IFSシェル変数はスペースとする)
#-adsh_conf COMMAND_CONV_ARG "D:\JP1AS" "C:\\Documents and Settings" ←引数の変換規則1 #-adsh_conf COMMAND_CONV_ARG "A=1" "A=1 &" ←引数の変換規則2
ジョブ定義スクリプトの内容
cd "D:\JP1AS" ←1. readonly A=1 ←2. eval cd "D:\JP1AS" ←3. eval readonly A=1 ←4.
変換規則1に従って次のように変換され,実行される。
cd "C:\\Documents and Settings"
変換規則2に従って変換するが,次のように文字列が区切られる。
readonly A=1 &
evalコマンドの実行時に,変換規則1に従って次のように変換される。
eval cd "C:\\Documents and Settings"
しかし,cdコマンド実行時に次のように引数が区切られ解釈される。
cd C:\Documents and Settings
evalコマンドの実行時に変換規則2に従って次のように変換される。
eval readonly A=1 &
しかし,readonlyコマンドの実行時に次のように引数が区切られ解釈される。
readonly A=1 &
このパラメーターによる変換は,変数置換およびファイル名置換が解決した内容で実施されます。このため,ワイルドカードを含んだ文字列を引数に指定した場合,ワイルドカードによる置き換えが解決した内容をコマンドの引数として認識します。
このパラメーターをtestコマンドに適用した場合,形式の違いによってコマンド実行時の引数の文字列の解釈が異なります。[[ ]]の形式では,配列の要素に変数の置き換えを指定した場合,このパラメーターによる変換の対象外となります。このため,testコマンドを使用して,このパラメーターによるコマンドの引数を変換する場合は,testまたは[ ]による形式の使用を推奨します。
(例)
環境ファイルの内容
#-adsh_conf PATH_CONV_ENABLE \\ : #-adsh_conf COMMAND_CONV_ARG "/tmp2" "/tmp" ←引数の変換規則1 #-adsh_conf COMMAND_CONV_ARG "ARY[1]" "/tmp" ←引数の変換規則2
ジョブ定義スクリプトの内容
ARY[0]="/var" ←配列ARYに"/var","/tmp2","/home"を格納 ARY[1]="/tmp2" ARY[2]="/home" id1=1 [[ -d ${ARY[$id1]} ]] ←${ARY[$id1]}を"/tmp2"まで置換。 このため,引数の変換規則1で"/tmp"に変換 [[ -d ARY[$id1] ]] ←置換しないで"ARY[$id1]"が引数となる。 "$"は指定できないため,変換対象外 [ -d ${ARY[$id1]} ] ←${ARY[$id1]}を"/tmp2"まで置換。 置換した結果を引数の変換規則1で"/tmp"に変換 [ -d ARY[$id1] ] ←${ARY[$id1]}を"ARY[1]"まで置換。 このため,引数の変換規則1で"/tmp"に変換
次に示すコマンドを実行した場合,引数に指定されたコマンドが実際には動作しますが,このパラメーターは引数に指定されたコマンドに対しても比較・変換を実行します。
builtinコマンド
commandコマンド
evalコマンド
execコマンド
time予約語コマンド
次の例では,builtinコマンドの引数に指定されたpwdが実際には動作しますが,環境ファイルの内容に従ってreadonlyコマンドが実行されます。
環境ファイルの内容
#-adsh_conf COMMAND_CONV_ARG pwd readonly
ジョブ定義スクリプトの内容
builtin pwd
変換する規則を定義した順に検索し,最初に変換条件に合致したものだけが適用されます。
このパラメーターとPATH_CONVパラメーターで同じパス名に対して変換を定義した場合,PATH_CONVパラメーターによる変換が先に実施されます。PATH_CONVパラメーターで変換されたパス名をCOMMAND_CONV_ARGパラメーターでさらに変換する場合は,PATH_CONVパラメーターで変換されたパス名を指定してください。
このパラメーターではコマンドを実行するたびに,すべての引数に対して走査します。そのため,大量に設定するとジョブ定義スクリプトの実行時間に影響を及ぼす場合があります。注意してください。
コマンド引数2に,メタキャラクタではなく文字列「\」そのものを含む文字列を指定する場合,「\」を「\\」と記述してください。
使用例
Windows用に作成したジョブ定義スクリプトをUNIXで実行するため,"C:\temp"を"/tmp"に変換します。
#-adsh_conf PATH_CONV_ENABLE \\ ; #-adsh_conf COMMAND_CONV_ARG "C:\temp" /tmp
UNIX用に作成したジョブ定義スクリプトをWindowsで実行するため,"/tmp"を"C:\temp"に変換します。
#-adsh_conf PATH_CONV_ENABLE / : #-adsh_conf COMMAND_CONV_ARG /tmp "C:\\temp"