[vine-users:080707] Re: 再現しませんか?(XfceのXterminalエミュレーター+csh)

長南洋一 cyoichi @ maple.ocn.ne.jp
2010年 11月 19日 (金) 22:55:33 JST


長南です。

かとうさんのメールより [vine-users:080701]
> 
> On 10/11/19 15:11, Umeda Mitsunori wrote:
> > [suomi @ localhost ~]$ su
> > Password: 
> > setenv: 文法が間違っています.←ここが問題なのでしょうか?
> > 
> > root権限は無事に取得出来ているのですが、何故、どの様な文
> > 法が間違っていますか?と言うメッセージが出るのでしょうか
> 
>   ~/.cshrc中で"setenv hoge=value"と書いていませんか? 正しくは
>  "setenv hoge value"です。

これなんですけれど、su をしたということは、root として新たに
シェルを起動したということで、しかも root のシェルを csh に
変更しているわけだから、/root/.tcshrc が読まれるわけでしょう。
で、そこにこういうところがあります。

# 梅田さんへ。Vine の csh の本体は tcsh です。そして、実験して
# みたところでは、tcsh ではなく、csh として起動しても、
# ${HOME}/.tcshrc が読まれるらしいです。
# .tcshrc、.cshrc などについては、man tcsh で調べてください。

  setenv target ${HOME}/.vine/system/ime
  if ( -f $target ) then
      foreach _line_ ("`/bin/cat $target`")
	  eval `echo $_line_ | /bin/sed -e 's|=C$|=en_US|g' -e 's|\([^#]*\)=\(.*\)|setenv \1 \2|'`
      end
   ---- (以下省略) ----

${HOME}/.vine/system/ime なかには

  XMODIFIERS=@im=SCIM

があります。sed の正規表現のマッチはたしか最左最長 (用語は
これで正しいですか) ですから、s|\([^#]*\)=\(.*\)|setenv \1 \2| が

  setenv XMODIFIERS=@im SCIM

に変換されてしまう。その結果「setenv: 文法が間違っています」が
出る。そういうことではないでしょうか。

  -e 's|\([^#=]*\)=\(.*\)|setenv \1 \2|'

と書き直せば、一応エラーが出ないようです。副作用がなければ
よいのですが。

ざっとしか試していないので、間違えていたら、ご容赦。

-- 
長南洋一


vine-users メーリングリストの案内