|
>>4232 68user >コネクションが切れた場合は、connect しなおす必要があります。 コレクションが切れているか否かの検知ですが、クライアントからsendを 行ったときのタイムアウトを検知したときが一般的でしょうか (むしろこれしかない?) 宜しくお願いします。 |
|
>>4235 zsh 試しに下記を実行してみましたが、元に戻ってしまいました。。 echo内の日本語が文字化け?して「`」になっている為でしょうが 何故未だ日本語が表示できないのでしょうか? 問題ないサーバーではダブルコーテーションで囲まれてるのに 下記結果では囲まれてないのがダメなのでしょうか? ---------------------------------------------------- #!/usr/bin/csh -fx locale unsetenv LC_ALL setenv LANG ja_JP.PCK setenv LC_CTYPE ja_JP.PCK setenv LC_NUMERIC ja_JP.PCK setenv LC_TIME ja_JP.PCK setenv LC_COLLATE ja_JP.PCK setenv LC_MONETARY ja_JP.PCK setenv LC_MESSAGES ja_JP.PCK locale echo "ロードエラーチェックリスト作成処理($0) 開始" ---------------------------------------------------- locale LANG= LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C" LC_ALL=JA16SJIS unsetenv LC_ALL setenv LANG ja_JP.PCK setenv LC_CTYPE ja_JP.PCK setenv LC_NUMERIC ja_JP.PCK setenv LC_TIME ja_JP.PCK setenv LC_COLLATE ja_JP.PCK setenv LC_MONETARY ja_JP.PCK setenv LC_MESSAGES ja_JP.PCK locale LANG=ja_JP.PCK LC_CTYPE=ja_JP.PCK LC_NUMERIC=ja_JP.PCK LC_TIME=ja_JP.PCK LC_COLLATE=ja_JP.PCK LC_MONETARY=ja_JP.PCK LC_MESSAGES=ja_JP.PCK LC_ALL= echo [hG[`FbNXgャ(/disk18/acua/acua01/sh/FNC07998.csh) Jn 不整合 - ` ---------------------------------------------------- |
|
>>4238 まつ 実験してみましたが、うまくいかないサーバには ja_JP.PCK の ロケールがインストールされていないようです。 >>4232 68user で「csh のバグでは」と言いましたがこれは誤りで、csh だけが 真面目にエラーチェックしているような感じです。 動かないマシン (Solaris8) の /usr/lib/locale/ja_JP.PCK/: LC_MESSAGES/ 動くマシン (Solaris2.6) の /usr/lib/locale/ja_JP.PCK/: LC_CTYPE/ LC_MESSAGES/ LC_TIME/ ja_JP.PCK.so.1 locale_description methods_ja_JP.PCK.so.1 そして ja_JP.PCK ロケールが含まれているマシンであっても、 #!/bin/csh setenv LANG ja_JP.PCK echo "ロードエラーチェックリスト作成処理($0) 開始" このスクリプトは動作しませんでした。おそらく、ja_JP.PCK にした 時点では、既にスクリプトの字句解析は終了しているからだろうと思います。 対策案は 3つ。 案1. - ja_JP.PCK ロケールをインストールする。インストール方法は知りませんが、 以前他のマシンから /usr/lib/locale/ja_JP.PCK/ をぶっこ抜いてきたことが あったっけ。 - さらに wrapper スクリプトを作る 案2. Shift_JIS の「チ」の 2バイト目が ` であることが直接の原因なわけで、 echo 'ロードエラーチェックリスト作成処理('$0') 開始' などと '' で囲んで ` を解釈させないようにする。 案3. 一番いいのは、スクリプトを EUC-JP に変えて、ロケールを混在 させないこと。 あと、 > LC_ALL=JA16SJIS というロケールは存在しないので、おそらく無効なロケール扱いされて いるでしょう。JA16SJIS って Oracle 的なロケール表記ですから。 LANG と LC_* の関係は以下の URL をどうぞ。 http://www.jp.freebsd.org/QandA/HTML/2199.html http://www.jp.freebsd.org/QandA/HTML/2200.html |
|
>>4237 しず send はローカルの mbuf にデータをコピーしたら正常終了と みなすので、エラーになりません。 recv でエラーになるか、次回の send で EPIPE が発生するかの いずれかです。 |
|
>>4239 68user /usr/lib/locale/ja_JP.PCK/:を両サーバーで比較しましたが同じでした。 そして上手く行くサーバーでは #!/bin/csh setenv LANG ja_JP.PCK echo "ロードエラーチェックリスト作成処理($0) 開始" も動作しました。 LANG と LC_* の関係、有り難うございます。勉強になります。 #!/bin/csh -fx locale unsetenv LC_ALL setenv LC_ALL ja_JP.PCK setenv LANG ja_JP.PCK unsetenv LC_ALL locale env として、うまくいくサーバーと同じlocaleに出来ましたがそれでも不整合になります。 env実行結果 --上手く行くサーバー----------------------------------------- HOME=/export/home/adm HZ=100 LANG=ja_JP.PCK LOGNAME=adm MAIL=/var/mail/adm PATH=/opt/oracle/product/8.1.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin: PS1=# PWD=/opt/netos/bin SHELL=/bin/csh TERM=vt100 TZ=Japan USER=adm _INIT_NET_STRATEGY=none _INIT_PREV_LEVEL=S _INIT_RUN_LEVEL=3 _INIT_RUN_NPREV=0 _INIT_UTS_ISA=sparc _INIT_UTS_MACHINE=sun4u _INIT_UTS_NODENAME=isv1dm10 _INIT_UTS_PLATFORM=SUNW,Ultra-Enterprise-10000 _INIT_UTS_RELEASE=5.8 _INIT_UTS_SYSNAME=SunOS _INIT_UTS_VERSION=Generic_108528-16 --上手く行かないサーバー----------------------------------------- HOME=/ HZ=100 LOGNAME=root PATH=/usr/sbin:/usr/bin:/opt/EMCpower/bin:/etc:/usr/ccs/bin:/usr/local/bin SHELL=/sbin/sh TERM=vt100 TZ=Japan PWD=/opt/netos5/bin USER=root LANG=ja_JP.PCK ----------------------------------------------------------------- この辺の環境が違うのがダメなのでしょうか? 案1はja_JP.PCK ロケールはインストールされており上記でLANGの設定も 出来たので、案からは外れたと思います。 案2ですが、echoをダブルコーテーションで囲むのとシングルコーテーションで 囲むのでは解釈が異なるのですね?? 知りませんでした。。 案3ですが、うまくいくサーバーではShift_JISで動作しているので 腑に落ちません。。envの結果に差があるのが原因でしょうか?? 文字コードって奥が深いというか複雑というか厄介ですね。。(^^; |
|
>>4241 まつ > /usr/lib/locale/ja_JP.PCK/:を両サーバーで比較しましたが同じでした。 そうですか、謎ですね。 > そして上手く行くサーバーでは > #!/bin/csh > setenv LANG ja_JP.PCK > echo "ロードエラーチェックリスト作成処理($0) 開始" > も動作しました。 それは最初から LC_CTYPE が ja_JP.PCK になっているからではないですか? LANG・LC_* を全部クリアして、このスクリプトが動きますか? うちの ja_JP.PCK ロケールがインストールされている Solaris2.6 ではエラーになりました。 > 案3ですが、うまくいくサーバーではShift_JISで動作しているので > 腑に落ちません。。envの結果に差があるのが原因でしょうか?? ロケールを統一ってのは、例えばログのエンコーディングがばらばら だったりすると grep するにも面倒でしょ、というレベルの話です。 うまくいかないサーバで、 #!/bin/csh -f echo "ロードエラーチェックリスト作成処理($0) 開始" のスクリプトを root で % env LANG=ja_JP.PCK [スクリプト名] とすると動くのですよね? あと、うまくいかないサーバで、 - root で実行するとエラー - user01 で実行するとうまく動く ということですよね? root と user01 のログイン後の env 結果を比較してみてはどうですか? |