68user's page 掲示板

Prev< No. 4481〜4485> Next  [最新発言に戻る] [過去ログ一覧]
No. 4481 # 2006/01/16 (月) 23:39:42
>>4480 zsh

>パイプを使用した場合と同様、サブシェルで動作する事が原因のようです。
>Solaris8のshで確認した所、forkしてからサブシェルの中でファイルを
>オープンしていました。
サブシェルで動作するとは、子プロセスでシェル起動しているというこ
ですか。

whileの前に
exec 0<file.txt
を入れないと、最終行が表示されないということですか。

No. 4482 # 68user 2006/01/17 (火) 10:45:07
>>4480 zsh
あー、なるほど。
>>4467 68user
> 補足。Solaris の sh では
>> while read -r line; do
>> done < file.txt
> でもダメなようですね
のことですね。別件かと勘違いしておりました。

No. 4483 # zsh 2006/01/17 (火) 10:51:51
>>4481
>サブシェルで動作するとは、子プロセスでシェル起動しているというこ
>ですか。

その通りです。

>whileの前に
>exec 0<file.txt
>を入れないと、最終行が表示されないということですか。

サブシェル(while)内で
use_buf=1
としても、親シェルには引き継がれないので
最後の if 文が必ず偽になります。
よって、最終行(最終行が半角スペースで始まる場合には最終 2 行)が
表示されないと思います。

No. 4485 # 2006/01/17 (火) 12:54:25
>>4483 zsh
試して見ました。

ファイルの最後が空行(最終行が改行コードで終了)の場合、
whileの前に
exec 0<file.txt
を入れないくても、最終行が表示されました。

最終行の終わりが、改行コードではなく、ファイルの終端(EOF)がある場合、
catコマンドでファイルを表示した時、最終行の後ろに、プロンプトが来る
ファイルをやると、最終行が表示されません。
whileの前に
exec 0<file.txt
を入れた場合でも。

Prev< No. 4481〜4485> Next  [最新発言に戻る] [過去ログ一覧]