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