vine-users ML アーカイブ



[vine-users:068522] Re: Korn shell でNISログイ ン時にエラー

  • From: 長南洋一 <cyoichi@xxxxxxxxxxxxxxx>
  • Subject: [vine-users:068522] Re: Korn shell でNISログイ ン時にエラー
  • Date: Fri, 12 Nov 2004 22:32:18 +0900 (JST)
長南です。

戸山さんのメールより [vine-users:068501]
> 
> Vine 3.0 に NIS 認証で ksh を使ってログインしているのですが、ログイン時に
> 以下のようなエラーが出ます。
> 
>    ----- (中略) -----
> 
> どうやら原因はこれらのスクリプトが bash で動かす事を前提に書かれていること
> のようです。実際、export は bash と ksh でパラメータが違うようですし、ksh
> では source コマンドさえ動かないようです (これはなぜか私にも分かりません
> が)。NIS を使って様々な UNIX を動かす関係上 bash を使う事ができないので、
> 何とかこのエラーを修正したいと思っておりますが、いい方法がありますでしょう
> か。

Vine 3.0 が動いているのは、リモートのマシンなのですね。ローカルなら、
グラフィック・ログインをすればよさそうですから。

そうなると、/etc/profile.d にあるスクリプトを ksh でも動くように
書き直すよりなさそうです。

ちょっと試してみましたが、思いのほか簡単にできるようです。

1) ksh では関数の export ができないようなので、export -f を使っている
   スクリプトがあったら、先頭に
       [ "$SHELL" = "/bin/ksh" ] && return 0
   とでも書いておく。そしてその関数の機能が必要なら、ホームディレクトリ
   にある ksh の設定ファイルで実現するようにする。
2) source コマンドを .(ドット・コマンド)に変更する。
3) リダイレクションを ksh でも有効な書き方にする。
4) ほかにも bash 特有の書き方をしている部分があったら(bash にしかない
   内部コマンドを使っているなど)、ksh でも可能なやり方に書き変える。
5) あとは実際に使ってみて、問題があったら修正。

# 実のところ、直すのは数カ所しかありません。

ksh は /usr/share/vine/vinelib の実行でもエラーを出していますが、
/usr/share/vine にあるスクリプトを bash、ksh 両用に書き直すのは
面倒です。そこで、こちらは手を入れずに、/etc/profile.d/ime.sh で
/usr/share/vine/vinelib を読み込まず、/etc/X11/xinit/xinitrc.d/setime
で(imelib の代わりに)読み込むようにしました。コンソールで setime を
実行した後、再ログインしないと、変更が完全に反映しないという、副作用が
ありますけれど。

ローカルに ksh のユーザを作って試したところ、一応うまく行ったようです。
まあ、ちょっとしか試していませんから、長い間使っているうちに、何か問題が
出てくるかもしれませんが。

-- 
長南洋一