5.9.5 パス名を扱うシェル変数を定義する

#-adsh_path_varコマンドを使用すると,パス名を扱うシェル変数を定義できます。パス名を扱うシェル変数を用いると,それらを含む文字列のパス区切り文字およびディレクトリ区切り文字をWindowsやUNIXなどの環境に合わせて変換できます。

JP1/Advanced Shellは,次の条件をすべて満たす文字列のパス区切り文字およびディレクトリ区切り文字を変換します。

#-adsh_path_varコマンドは,次のどちらかの場合だけ使用できます。

なお,次のようにすると継続行を指定できます。ただし,1行目の#-adsh_path_varコマンドの後ろにはシェル変数名を指定できません。

 1行目:#-adsh_path_var
 2行目:#-adsh  var001,var002,var003,var004

<この項の構成>
(1) 使用例
(2) ジョブ定義スクリプトイメージへの出力例

(1) 使用例

(a) Windowsの場合

●環境ファイルの指定

#-adsh_conf PATH_CONV_ENABLE / :  ←パス変換の有効化
#-adsh_conf PATH_CONV /home/hitachi "C:¥¥hitachi"  ←パス文字列の置換1
#-adsh_conf PATH_CONV /tmp/jp1as "D:¥¥jp1as_tmp"  ←パス文字列の置換2
#-adsh_conf PATH_CONV /tmp "C:¥¥temp"  ←パス文字列の置換3
#-adsh_conf PATH_CONV_ACCESS /dev/null nul  ←ファイル入出力時のファイルパスの変換

●ジョブ定義スクリプトの指定

#-adsh_path_var PATH,DIR,DIR3  ←シェル変数の定義1

DIR="/home/hitachi/bin"  ←「DIR="C:¥¥hitachi¥¥bin"」にパス文字列の置換1で変換

"$DIR/myprog"  ←「"$DIR¥¥myprog"」にシェル変数の定義1で変換

"${DIR}/myprog"  ←「"${DIR}¥¥myprog"」にシェル変数の定義1で変換

DIR2=$DIR
"$DIR2/myprog"  ←「$DIR2」はシェル変数の定義1にないため,変換されない

$DIR/myprog  ←"(ダブルクォーテーション)で囲まれていないため,変換されない

FILE1="/tmp/jp1as/file"  ←「"D:¥¥jp1as_tmp¥¥file"」にパス文字列の置換2で変換

DIR3=""
ls "$DIR3../bin"  ←「"..¥¥bin"」にシェル変数の定義1で変換。相対パスも変換

DIR4="/home/hitachi/sbin:$DIR2"  ←「C:¥¥hitachi¥¥sbin;$DIR2」にパス文字列の
                                 置換1で変換。パス区切り文字も変換

PATH="../bin/:$DIR"  ←「..¥¥bin¥¥;$DIR」にシェル変数の定義1で変換
                     パス区切り文字も変換

"$DIR2/myprog" > /dev/null  ←「nul」にファイル入出力時のファイルパスの変換で変換

(b) UNIXの場合

●環境ファイルの指定

#-adsh_conf PATH_CONV_ENABLE ¥¥ ;  ←パス変換の有効化
#-adsh_conf PATH_CONV "C:¥¥hitachi" /home/hitachi  ←パス文字列の置換1
#-adsh_conf PATH_CONV "D:¥¥jp1as_tmp" /tmp/jp1as  ←パス文字列の置換2
#-adsh_conf PATH_CONV "C:¥¥temp" /tmp   ←パス文字列の置換3
#-adsh_conf PATH_CONV_ACCESS nul /dev/null  ←ファイル入出力時のファイルパスの変換(Windows,Linux限定)

●ジョブ定義スクリプトの指定

#-adsh_path_var PATH,DIR,DIR3  ←シェル変数の定義1

DIR="C:¥¥hitachi¥¥bin"  ←「DIR="/home/hitachi/bin"」にパス文字列の置換1で変換
"$DIR¥¥myprog"  ←「"$DIR/myprog"」にシェル変数の定義1で変換

"${DIR}¥¥myprog"  ←「"${DIR}/myprog"」にシェル変数の定義1で変換

DIR2=$DIR
"$DIR2¥¥myprog"  ←「$DIR2」はシェル変数の定義1にないため,変換されない

$DIR¥¥myprog  ←"(ダブルクォーテーション)で囲まれていないため,変換されない

FILE1="D:¥¥jp1as_tmp¥¥file"  ←「"/tmp/jp1as/file"」にパス文字列の置換2で変換

DIR3=""
ls "$DIR3..¥¥bin"  ←「"../bin"」にシェル変数の定義1で変換。相対パスも変換

DIR4="C:¥¥hitachi¥¥sbin;$DIR2"  ←「/home/hitachi/sbin:$DIR2」にパス文字列の
                                置換1で変換。パス区切り文字も変換

PATH="..¥¥bin¥¥;$DIR"  ←「../bin/:$DIR」にシェル変数の定義1で変換
                       パス区切り文字も変換

"$DIR2¥¥myprog" > nul  ←「/dev/null」にファイル入出力時のファイルパスの変換で変換

(2) ジョブ定義スクリプトイメージへの出力例

ジョブ実行ログには,パスを変換する前のジョブ定義スクリプトに加え,変換したあとの行も出力します。また,ジョブ定義スクリプト中で合致した変換規則,ジョブ定義スクリプト名および行番号をメッセージとして出力します。

********  JP1/Advanced Shell MESSAGE  ********
(省略)
21:58:28 000903 KNAX6803-I Access path convert rule matched. filename="D:¥home¥path_conv.ash" line=4 rule_str="./local.log":"./myprog.log"
(省略)

********   Script IMAGE    ********

***** D:¥home¥path_conv.ash *****
0001 : #-adsh_job JOB001
0002 : #-adsh_path_var DIR
0003 : DIR="/home/hitachi/bin"; DIR2="/tmp/tmpfile"
0004 : "$DIR/myprog" > ./local.log
0005 : exit

***** converted lines in D:¥home¥path_conv.ash *****
0003 : DIR="C:¥¥Program Files"; DIR2="C:¥¥temp¥¥tmpfile"
0004 : "$DIR¥¥myprog"

***** CONVERSION INFORMATION *****
21:58:28 000903 KNAX6800-I Path convert rule matched. filename="D:¥home¥path_conv.ash" line=3 rule_str="/home/hitachi/bin":"C:¥¥Program Files"
21:58:28 000903 KNAX6800-I Path convert rule matched. filename="D:¥home¥path_conv.ash" line=3 rule_str="/tmp":"C:¥¥temp"
21:58:28 000903 KNAX6801-I Path convert rule matched. filename="D:¥home¥path_conv.ash" line=4 rule_var="DIR"