2.6.2 パス名を変換する
ジョブ定義スクリプトに記載したパス名をWindowsとUNIXの両方で使用できるよう,パスの変換内容をパラメーターで定義します。
JP1/Advanced Shellでは,プラットフォームに対応してジョブ定義スクリプトに次のようにパスを記載できます。
項目 |
Windows環境 |
UNIX環境 |
---|---|---|
ディレクトリ区切り文字 |
\\ ※1 |
/ |
パス区切り文字 |
; |
: |
パス名の大文字と小文字 |
区別する ※2 |
区別する |
絶対パス |
パス名の先頭文字は,「ドライブレター:\\」 ※1,※3 |
パス名の先頭文字は,「/」 |
上記の規則によって,パスを変換するにはパラメーターに次の定義が必要です。
-
Windows環境でジョブ定義スクリプトを実行させたい場合
UNIX環境の区切り文字を読めるようにするため,「/」と「:」を定義します。
-
UNIX環境でジョブ定義スクリプトを実行させたい場合
Windows環境の区切り文字を読めるようにするため,「\\」と「;」を定義します。
パス名を変換するためのパラメーターを次に示します。
-
PATH_CONV_ENABLEパラメーター
パスを変換する機能を有効にします。変換前のパス区切り文字およびディレクトリ区切り文字を指定します。
Windows環境では「/」と「:」を定義します。
UNIX環境では「\\」と「;」を定義します。
-
PATH_CONV_RULEパラメーター【Windows限定】
パス名の変換対象として次のどちらかを定義します。
-
ダブルクォーテーションで囲まれた範囲を変換対象とする(パス変換ルール1)
-
シングルクォーテーションで囲まれた範囲を除く全体を変換対象とする(パス変換ルール2)
パラメーターの指定を省略した場合やUNIXの場合は,パス変換ルール1が適用され,ダブルクォーテーションで囲まれた範囲だけが変換されます。
-
-
PATH_CONVパラメーター
パス名の変換前・変換後の文字列を定義します。ジョブ定義スクリプトを実行するときにパラメーターで定義した規則に従い置換します。パス名が変換されるのは,PATH_CONV_RULEパラメーターで定義された範囲だけです。
また,PATH_CONVパラメーターで定義した変換文字列に合致していれば,パス区切り文字およびディレクトリ区切り文字も変換されます。
(1) ファイルパスの変換例(パス変換ルール1の場合)
環境ファイルの情報に従って,実行前のジョブ定義スクリプトが実行後にどのように変換されるかを次に示します。
-
環境ファイルの情報
Windowsの場合の環境ファイルの例を次に示します。
#-adsh_conf PATH_CONV_ENABLE / : #-adsh_conf PATH_CONV_RULE 1 #-adsh_conf PATH_CONV /home/hitachi/bin "C:\\Program Files" ←1. #-adsh_conf PATH_CONV /tmp "C:\\temp" ←2.
-
実行前のジョブ定義スクリプト
#-adsh_path_var DIR,DIR2 "/home/hitachi/bin/myprog1" "/tmp/file" ←1.,2. DIR="/home/hitachi/bin" ←1. "$DIR/myprog1" "/tmp/file" ←2. DIR2=$DIR "$DIR2/myprog2" "/tmp/file" ←2.
-
実行後のジョブ定義スクリプト
パスを変換すると次のようになります。
"C:\\Program Files\\myprog1" "C:\\temp\\file" ←1.,2. DIR="C:\\Program Files" ←1. "$DIR\\myprog1" "C:\\temp\\file" ←2. DIR2=$DIR "$DIR2\\myprog2" "C:\\temp\\file" ←2.
-
PATH_CONVパラメーターの定義に従い,パスが「/home/hitachi/bin」から「C:\\Program Files」へ変換されています。
また,PATH_CONV_ENABLEパラメーターの定義に従い,ディレクトリ区切り文字が「/」から「\\」へ変換されています。
-
PATH_CONVパラメーターの定義に従い,パスが「/tmp」から「C:\\temp」へ変換されています。
また,PATH_CONV_ENABLEパラメーターの定義に従い,ディレクトリ区切り文字が「/」から「\\」へ変換されています。
(2) ファイルパスの変換例(パス変換ルール2の場合)
環境ファイルの情報に従って,実行前のジョブ定義スクリプトが実行後にどのように変換されるかを次に示します。
-
環境ファイルの情報
Windowsの場合の環境ファイルの例を次に示します。
#-adsh_conf PATH_CONV_ENABLE / : #-adsh_conf PATH_CONV_RULE 2 #-adsh_conf PATH_CONV /home/user01 d:\\home\\user01 #-adsh_conf PATH_CONV BB/AA BB\\AA
-
実行前のジョブ定義スクリプト
#-adsh_job JOB001 #-adsh_path_var DIR01 echo -E "/home/user01/file" cat /home/user01/file DIR01=/home/user01 cat $DIR01/file02 ←1. PATH=/home/user01/prog:$PATH ←2. uap01 DIR02=/home/user01 PATH="$DIR02:/home/user01/prog:$PATH" AA=10 BB=200 let ANS=BB/AA ←3. echo $ANS cat BB/AA
-
実行後のジョブ定義スクリプト
パスを変換すると次のようになります。
#-adsh_job JOB001 #-adsh_path_var DIR01 echo -E "d:\\home\\user01\\file" cat "d:\\home\\user01"\\file DIR01="d:\\home\\user01" cat "$DIR01"\\file02 ←1. PATH="d:\\home\\user01"\\prog";""$PATH" ←2. uap01 DIR02="d:\\home\\user01" PATH="$DIR02;d:\\home\\user01\\prog;$PATH" AA=10 BB=200 let ANS="BB\\AA" ←3. echo $ANS cat "BB\\AA"
-
変換前のジョブ定義スクリプトにパス名を扱うシェル変数DIR01を定義しているため,変換結果ではシェル変数DIR01が「"(ダブルクォーテーション)」で囲まれ,その後ろにディレクトリ区切り文字が付加されます。
-
文字列の先頭部分が変換規則と一致するため「"(ダブルクォーテーション)」で囲まれます。また,パス区切り文字が「";"」に変換されます。さらに,文字列がパスとして変換されたので,変数名PATHもダブルクォーテーションで囲まれます。
-
演算式がパス変換規則に一致したため変換されています。変換されないようにするには,ジョブ定義スクリプトを次のどちらかの方法で修正する必要があります。
-
「let ANS='BB/AA'」のようにシングルクォーテーションで囲む。
-
「let ANS=$BB/$AA」のように参照する変数名の先頭に$を付加する。
-
(3) 注意事項
-
この定義を使用してパス名をWindows用に変換すると,パス名中のディレクトリ区切り文字が「\」となります。そのため,パス名を無条件にechoコマンドで表示しているジョブ定義スクリプトでは,「\」およびそれに続く文字がエスケープ文字に置き換わります。
エスケープ文字に置き換えない場合は,echoコマンドに-Eオプションを指定して実行してください。詳細については,「9.3 シェル標準コマンド」の「echoコマンド(引数で指定した内容を標準出力に出力する)」を参照してください。
-
メタキャラクタの「~」,「~+」および「~-」は,クォーテーションで囲んだり,クォーテーションで囲まれた文字列やエスケープ文字(\)の直前に記述されたりすると,置換されません。メタキャラクタについては,「5.1.6 メタキャラクタ」を参照し,対応するシェル変数を使用してください。