[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00231] Re: Re: patchのインストールについて
- Subject: [FDclone-users:00231] Re: Re: patchのインストールについて
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Sat, 06 Sep 2003 04:07:52 +0900
しらいです。
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 する予定で
す。
しらい たかし