|
>>4479 68user >わたくしのまわりには Solaris がないので試せませんが、これは何が原因で >最終行が表示されないのでしょうか? パイプを使用した場合と同様、サブシェルで動作する事が原因のようです。 Solaris8のshで確認した所、forkしてからサブシェルの中でファイルを オープンしていました。 (ksh/bash/zshはサブシェルで動作しないので問題なし。) |
|
>>4480 zsh >パイプを使用した場合と同様、サブシェルで動作する事が原因のようです。 >Solaris8のshで確認した所、forkしてからサブシェルの中でファイルを >オープンしていました。 サブシェルで動作するとは、子プロセスでシェル起動しているというこ ですか。 whileの前に exec 0<file.txt を入れないと、最終行が表示されないということですか。 |
|
>>4480 zsh あー、なるほど。 >>4467 68user > 補足。Solaris の sh では >> while read -r line; do >> done < file.txt > でもダメなようですね のことですね。別件かと勘違いしておりました。 |
|
>>4481 お >サブシェルで動作するとは、子プロセスでシェル起動しているというこ >ですか。 その通りです。 >whileの前に >exec 0<file.txt >を入れないと、最終行が表示されないということですか。 サブシェル(while)内で use_buf=1 としても、親シェルには引き継がれないので 最後の if 文が必ず偽になります。 よって、最終行(最終行が半角スペースで始まる場合には最終 2 行)が 表示されないと思います。 |
|
>>4483 zsh 試して見ました。 ファイルの最後が空行(最終行が改行コードで終了)の場合、 whileの前に exec 0<file.txt を入れないくても、最終行が表示されました。 最終行の終わりが、改行コードではなく、ファイルの終端(EOF)がある場合、 catコマンドでファイルを表示した時、最終行の後ろに、プロンプトが来る ファイルをやると、最終行が表示されません。 whileの前に exec 0<file.txt を入れた場合でも。 |
|
>>4485 お >ファイルの最後が空行(最終行が改行コードで終了)の場合、 >whileの前に >exec 0<file.txt >を入れないくても、最終行が表示されました。 試してみましたが、最終行(空行)は表示されませんでした。 Solaris 標準の sh ですよね? >最終行の終わりが、改行コードではなく、ファイルの終端(EOF)がある場合、 >catコマンドでファイルを表示した時、最終行の後ろに、プロンプトが来る >ファイルをやると、最終行が表示されません。 それは read コマンドが読込めないので、仕方がないというか そこまでやるならシェルスクリプトにこだわらない方が良いかと。 |
|
GD::Graph で遊んでみました。 http://x68000.q-e-d.net/~68user/webcgi/gd-graph.html http://x68000.q-e-d.net/~68user/webcgi/sample/perl/graph-maker.cgi |