[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00231] Re: Re: patchのインストールについて



 しらいです。

In Message-Id <OE41mIEGUdoPrUSgBdx00038789@hotmail.com>
        "Akira Asahina" <a_akira_1975@hotmail.com>さんwrites:
> あさひな と申します。

> ただ、残念な事に、私の環境ではcronからの実行が
> 「No TERMCAP is prepared」エラーとなってしまいます。

 patch は上手く当てられたものの依然 error が消えない訳です
ね。


> もし、何かご存知でしたらお教えください。

 うちでは全然再現しなかったので、もしやと思って libncurses
の source を紐解いてみたところ、どうやら libncurses の独自仕
様が原因のようですね。

 端末を持たない環境では当然 $TERM も設定されていない訳で、
そういうケースでは TERM=unknown と見なして処理するというのが
定石になっています。
 ところが、libncurses では unknown 端末は entry が存在しな
いことになってしまっています。これは unknown が generic_type
(gn) 属性を持っているせいです。
 この属性は汎用端末に規定されているもので、line printer だ
とかパンチカードだとか、そういう今風の端末以外の端末を表すフ
ラグです。

 一般には、そういう端末であっても entry は存在するので、こ
れを扱うアプリ側では、一応端末として存在を認識した上で、この
フラグを見て「使えない」と判断するべきなんですが、libncurses
の実装では entry が存在しないことにされてしまっています。
 このため、$TERM が未設定の環境では「unknown」と見なして処
理させたくても、「そんなものは無い」として蹴られてしまう訳で
す。
 tset や tic など libncurses 附属のコマンド類でも、端末名不
明の際には「unknown」を使うようにしている癖に、この仕様では
「unknown」はてんで使いものになりませんね。


 という訳で、対症療法的な解決策としては、「unknown」以外の
端末名を $TERM に設定してから fdsh を起動すれば、cron 内の処
理でも「entry 無し」扱いにされないと思います。
 端末入出力は発生しないので、ここで設定する端末名は gn 属性
さえ無ければ何でも構わない訳ですが、「unknown」とほぼ同内容
の「dumb」辺りを設定しておけば無難なのではないでしょうか。
 fdsh を呼ぶ直前に「TERM=dumb; export TERM」という行を用意
するか、もしくは「TERM=dumb fdsh ...」のように環境変数指定を
冠して fdsh を呼ぶか、そのどちらかでしょうね。

 恒久的な対策としては、端末名が未定義の場合には「unknown」
「un」「dumb」の順に entry を調べてみて、どれかが見つかれば
その名前を端末名にするように実装します。
 その上で、cron 内のように端末を持たない場合にはそもそも端
末設定を行なわせないようにしておきますね。上記の 3 つともが
gn 属性になっていたとしても、少なくとも端末の無い場合の対処
だけは出来るでしょう。

 一応 FreeBSD 環境で libncurses を link して確認してみた限
りでは、この実装で特に支障なさそうでした。他の環境でも暫く様
子を見た上で、今月中くらいを目処に新版を release する予定で
す。

                                               しらい たかし