5.1.6 別プロセスでの実行【UNIX限定】
ジョブ定義スクリプト内に次の書式が記述されていた場合,カレントプロセスとは異なるプロセスで実行します。別プロセスで変更した内容については,カレントプロセスには引き継がれません。別プロセスで実行する使用例を次に示します。
- 使用例
パイプ(|)による別プロセスの実行
コマンド置換($(),``)による別プロセスの実行
$(date '+%Y%m%d') #dateコマンドの出力結果を名称とするコマンドを実行
`date '+%Y%m%d'` #dateコマンドの出力結果を名称とするコマンドを実行 |
|&によるコプロセスの実行
echo abc |& # 文字列abcをコプロセス実行で出力
sleep 1
read -p STR # コプロセスで出力した内容を読み込む
echo $STR |
コマンドのグループ化によるサブシェル実行
(TZ=GMT; export TZ; date) # 環境変数TZを一時的にGMTに
# 変更して時刻を出力する |
&によるバッググラウンド実行
文字列の置換は別プロセス側で行います。そのため,例えば上記の書式で変数に代入した文字列をコマンドとして実行すると,JOBLOGファイルのコマンド実行結果には置換前の変数名が出力されます。ただし,エイリアスはカレントプロセスで解決した上で実行するため,エイリアス解決後のコマンド名が出力されます。
ジョブ定義スクリプトの内容
ls="ls -lt" # 変数aに"ls -lt"を代入
alias gt="grep test" # エイリアス名gtに"grep test"を定義
$ls | gt # ls -lt | grep testを実行 |
実行ジョブのJOBLOGファイルの内容
<省略>
******** JP1/Advanced Shell MESSAGE ********
18:35:04 003001 KNAX0091-I ADSH003001 Job started.
18:35:04 003001 KNAX6520-I Command ls=ls -lt(line=1) succeeded. rc=0 E-Time=0.000s C-Time=0.000s
18:35:04 003001 KNAX6520-I Command alias(line=2) succeeded. rc=0 E-Time=0.000s C-Time=0.000s
18:35:04 003001 KNAX6520-I Command $ls(line=3) succeeded. rc=0 E-Time=0.074s C-Time=0.010s
18:35:04 003001 KNAX6520-I Command grep(line=3) succeeded. rc=0 E-Time=0.072s C-Time=0.010s
18:35:04 003001 KNAX0098-I ADSH003001 Job ended. rc=0 E-Time=0.078s C-Time=0.020s |
上記の書式で指定したコマンドに対して#-adsh_rc_ignoreコマンドの指定を有効にする場合,#-adsh_rc_ignoreコマンドの引数に指定するコマンド名は,置換前の文字列のベース名を指定する必要があります。
- 注意
- 別プロセスで次のシェル標準コマンドを実行した場合,コマンドの実行結果が正常終了とエラー終了のどちらになるかは,カレントプロセスで実行した場合と異なります。異なる点は次のとおりです。
- letコマンド
別プロセスで実行した場合,算術式を指定しないで実行すると,戻り値1で正常終了します。
- exitコマンド,returnコマンド
別プロセスで実行した場合,引数に数字以外を指定して実行すると,戻り値1で正常終了します。
- readコマンド
別プロセスで実行した場合,ファイルの終了(EOF)を検出すると,戻り値1でエラー終了します。#-adsh_step_startコマンドのsuccessRC属性や,#-adsh_rc_ignoreコマンドを使用して,エラー終了とならないようにしてください。