- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Kシェルが動作しない。)
Kシェルが動作しない
このQ&Aのポイント
- Kシェルが他のシェルから呼び出すと動作しない
- 子シェルがメインシェルのwhile文の中に入れると無限ループする
- 質問者はKシェルの動作が分からないため、助言を求めている
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
子シェルのreadが親の < /xxx/zzz.txtを読んでいるからです。 親のwhile read line のwhileの制御の方法と子シェルのreadがぶつかってます。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10359)
回答No.1
何をしたいのかよくわかりませんが、zzz.txt の中身は?ちゃんとYesとかNoだけの行が入ってますか? zzz.txt をメインシェルと子シェルが順番に読むので、ずれたりすると予想外の結果になるかも。 もしかして、メインシェルは、 while read line do $line を使った何らかの処理 ここでキーボードからYesとかNoとか入れてそれにより処理を変えたい done < /xxx/zzz.txt ということをしたいのですか?それなら全然駄目です。 もしそうなら、Yesが入ったらどうしたいのか、Noが入ったらどうしたいのか、どちらでもない物が入ったらどうしたいのか書いてみてください。
お礼
早速の回答有難うございます。 以下のようにすれば回避できました。 メインシェルにてloopさせていたzzz.txtの値を配列array[${count}]に入れる。 次にその配列を使用して子シェルを動かす。 #!/bin/ksh count=0 while read line do array[${count}]=${line} let count=count+1 done < /xxx/zzz.txt i=0 while (( ${i} < ${count} )) do echo ${array[$i]} let i=${i}+1 ksh /xxx/子シェル.ksh done ご教授いただきまして有難うございました。 大変助かりました。 以上