|
>>4242 68user 上手く行くサーバーで ---------------- unsetenv LC_ALL unsetenv LANG locale env echo "ロードエラーチェックリスト作成処理($0) 開始" ---------------- としたら ----------------------------------------- LANG= LC_CTYPE="C" ・・・ _INIT_UTS_VERSION=Generic_108528-16 (/data/keisu/ffile/shell/Data_Unqget.sh) ----------------------------------------- となりました。。二バイト文字が無視されている?? > うまくいかないサーバで、 > #!/bin/csh -f > echo "ロードエラーチェックリスト作成処理($0) 開始" > のスクリプトを root で > % env LANG=ja_JP.PCK [スクリプト名] > とすると動くのですよね? 私にはrootで実行する権限がなく、あるバッチ管理ツール経由で 起動させているのですが、そのツールに env LANG=ja_JP.PCK /disk01/hoge/hoge.csh と記述して起動させると stat: No such file or directory となってしまいました。。 > あと、うまくいかないサーバで、 > - root で実行するとエラー > - user01 で実行するとうまく動く > ということですよね? そうです。 バッチ管理ツールはそのツールプロセスを起動させた時点の 起動したユーザ環境が引き継がれるのですが、rootでその ツールを起動させています。 telnetでuser01でログインして実行すると上手く動くのです。 > root と user01 のログイン後の env 結果を比較してみてはどうですか? 以下のとおりです。 ------------root------------------------------------------------- #スクリプトにenvを書いてツールから実行させて吐き出した結果です 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 ------------user01------------------------------------------------- HOME=/export/home/user01 PATH=/opt/ora8i/app/oracle/product/8.1.7/bin:/usr/bin:/usr/ccs/bin:/usr/ucb:/bin:/usr/bin:/usr/ucb: /etc:. LOGNAME=user01 HZ=100 TERM=vt100 TZ=Japan SHELL=/bin/csh MAIL=/var/mail/user01 LANG=ja_JP.PCK _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=atras01 _INIT_UTS_PLATFORM=SUNW,Sun-Fire-480R _INIT_UTS_RELEASE=5.8 _INIT_UTS_SYSNAME=SunOS _INIT_UTS_VERSION=Generic_108528-22 PWD=/export/home/user01 USER=user02 ORACLE_BASE=/opt/ora8i/app/oracle ORACLE_HOME=/opt/ora8i/app/oracle/product/8.1.7 ORACLE_SID=SID_A NLS_LANG=Japanese_Japan.JA16SJIS ORA_NLS33=/opt/ora8i/app/oracle/product/8.1.7/ocommon/nls/admin/data LD_LIBRARY_PATH=/opt/ora8i/app/oracle/product/8.1.7/lib ----------------------------------------------------------------- 何が悪いのか分かりますか?? |
|
>>4243 まつ わたしが言いたいのは - スクリプトの先頭で LANG を設定しても、既に字句解析は 終了しているのだから意味がないのでは。 - うまく動く環境では、元々 ja_JP.PCK が設定されていただけでは。 ということです。 > stat: No such file or directory これは別問題ですよね。 #!/bin/csh -f echo "チェック" が動くかどうかを確認すべきです。 |
|
あと、 Locale could not be set properly についてはわかりません。 こちらの環境では、ja_JP.PCK ロケールがない場合のみ このエラーが出て、ロケールがある環境ではうまく動きました。 |
|
>>4243 まつ メッセージの意味としては、選択されたロケールが使用できない状態(つまりインストールされていない) である事を示しています。 恐らく今の状態は 1./etc/profile か /.profileで LC_ALL を設定している。(且つ間違い) 2.当然 root から生成された子プロセスにも LC_ALL が設定されている(且つ間違い) 3.LANG を変更する際に( LC_ALL が空ではないので) LC_ALL のロケールについても チェックされる →存在しないロケールなので「Locale could not be set properly」を出力 (ただし LANG は変更されている筈) だと思います。 一般ユーザで動作するのであれば、PCK ロケールはインストールされているので 文字化けの原因は、親プロセスの環境変数の違いによるのかも知れません。つまり >>4244 68user ではないかと。 (確認するためには wrapper スクリプトかますのが簡単だと思います。) |
|
>>4246 zsh > 3.LANG を変更する際に( LC_ALL が空ではないので) LC_ALL のロケールに > ついてもチェックされる なるほど、それは気がつきませんでした。 ja_JP.PCK ロケールがインストールされている Solaris2.6 で、LC_ALL に JA16SJIS をセットして、さらに LANG に ja_JP.PCK をセットすると、 Locale could not be set properly となりました。 |
|
68user様、zsh様、返事が遅くなり大変申し訳ございません。m(_ _)m >>4246 zsh とてもよく分かりました。 .profileは / にも /etc にもありませんでしたが、子プロセス起動時に 間違ったLC_ALLを設定しているのが原因なのですね。 子プロセスを再起動すれば解決するのでしょうね。 開発依頼者へお願いしても中々動いてくれません・・(T^T) なので、このスクリプトのみをEUC-JPに変えてunsetenv LC_ALLしたところ 正常に実行できました。 ということで、wrapperスクリプトをかまして確認してませんが、お二人の 仰ることに間違いはないですから、その旨開発依頼者へ報告しておきます。 色々有り難うございました。助かりました。m(_ _)m これで心置きなくお盆休みに入れます(^^) |