2004年11月12日

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

長南です。

戸山さんのメールより [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 のユーザを作って試したところ、一応うまく行ったようです。
まあ、ちょっとしか試していませんから、長い間使っているうちに、何か問題が
出てくるかもしれませんが。

--
長南洋一


投稿者 xml-rpc : 2004年11月12日 22:32
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/27736
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。