PIPE_CMD_LASTパラメーター(パイプの最終コマンドの実行プロセスを定義する)【UNIX限定】
形式
#-adsh_conf PIPE_CMD_LAST {CURRENT|OTHER}
機能
パイプラインの最終コマンドをカレントプロセスで実行するかどうかを定義します。
次のようにパイプラインの最終コマンドで変数の内容を更新し,パイプライン以降のコマンドで更新した内容を使用する場合は,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"が格納されています。
このパラメーターは同一の環境ファイル内で複数回指定することはできません。複数回指定した場合は,エラーメッセージが出力されてジョブは終了します。
オペランド
注意事項
-
システム環境ファイルとジョブ環境ファイルの両方にこのパラメーターが定義されていた場合,ジョブ環境ファイルでの定義が有効になります。
使用例
次に示す入力ファイルとジョブ定義スクリプトを使って,PIPE_CMD_LASTパラメーターを指定した場合の実行結果の違いを示します。
-
例1
ジョブ定義スクリプトの内容
STR="abcdefg" echo "ABCDEFG" | read STR echo $STR
標準出力への出力結果(PIPE_CMD_LASTパラメーターにCURRENTを指定した場合)
ABCDEFG
標準出力への出力結果(PIPE_CMD_LASTパラメーターにOTHERを指定した場合)
abcdefg
-
例2
ジョブ定義スクリプトの内容
A=1 echo "Hello World" | A=10 echo $A
標準出力への出力結果(PIPE_CMD_LASTパラメーターにCURRENTを指定した場合)
10
標準出力への出力結果(PIPE_CMD_LASTパラメーターにOTHERを指定した場合)
1
-
例3
入力ファイル「INFILE」の内容
user1,500,Tomato user2,1000,Tomato user3,300,Lettuce user1,450,Cabbage user1,250,Orange
ジョブ定義スクリプトの内容
typeset -i cnt=1 cat INFILE | grep user1 | while read NAME do if [ $cnt -ge 3 ]; then break fi echo "$cnt = $NAME" let cnt=cnt+1 done echo $cnt
whileからdoneまではパイプの最終コマンドとして扱われます。
標準出力への出力結果(PIPE_CMD_LASTパラメーターにCURRENTを指定した場合)
1 = user1,500,Tomato 2 = user1,450,Cabbage 3
標準出力への出力結果(PIPE_CMD_LASTパラメーターにOTHERを指定した場合)
1 = user1,500,Tomato 2 = user1,450,Cabbage 1