Hitachi

Advanced Shell 


7.3.40 PIPE_CMD_LASTパラメーター(パイプの最終コマンドの実行プロセスを定義する)

形式

UNIX版
#-adsh_conf PIPE_CMD_LAST {CURRENT|OTHER}
Windows版
#-adsh_conf PIPE_CMD_LAST {CURRENT|OTHER|SEQUENTIAL

機能

パイプラインの最終コマンドをカレントプロセスで実行するかどうかを定義します。

次のようにパイプラインの最終コマンドで変数の内容を更新し,パイプライン以降のコマンドで更新した内容を使用する場合は,CURRENTを指定してください。

ジョブ定義スクリプトの内容
typeset -i CNT=0
cat INFILE | while read STR
do
  echo "$STR"
  let CNT=CNT+1
done
echo "Line count is $CNT."

この結果,while文終了後のシェル変数CNTには,readコマンドで読み込まれた行数(INFILEの行数)が格納されます。

一方,次のようにパイプラインの最終コマンドで変数の内容を更新するが,パイプライン実行前の変数の内容で,パイプライン終了後に再度利用したい場合はOTHERを指定してください(CBL_SYSUT1,CBL_SYSUT2はCBLUAPxの共通インターフェース用変数と仮定します)。

ジョブ定義スクリプトの内容
CBL_SYSUT1=/file1
CBL_SYSUT2=/file2
CBLUAP1
cat INFILE | while read DIR
do
CBL_SYSUT1=`cmd1 y`
CBL_SYSUT2=`cmd2 y`
CBLUAP2
done
CBLUAP3

この場合,while文終了後のシェル変数CBL_SYSUT1には"/file1",CBL_SYSUT2には"/file2"が格納されています。

このパラメーターは同一の環境ファイル内で複数回指定することはできません。複数回指定した場合は,エラーメッセージが出力されてジョブは終了します。

オペランド

CURRENT

パイプラインの全コマンドを非同期実行します。パイプラインの最終コマンドが次に示すコマンドの場合,カレントプロセスで動作します。

  • シェル標準コマンド

  • 代入式

  • スクリプト制御文

  • シェル拡張コマンド

  • スクリプト予約語コマンド

  • 関数

パイプラインの最終コマンドが上記以外の場合,別プロセスで動作します。

OTHER

パイプラインの全コマンドを非同期実行します。パイプラインの最終コマンドは別プロセスで動作します。

SEQUENTIAL【Windows限定】

パイプラインの全コマンドをカレントプロセスで逐次実行します。また,コマンド間のデータの受け渡しに一時ファイルを使用します。

これAdvanced Shell 11-00より前のWindows版と同様の動作です。

注意事項

使用例

次に示す入力ファイルとジョブ定義スクリプトを使って,PIPE_CMD_LASTパラメーターを指定した場合の実行結果の違いを示します。