2011-01-02 6 views
1

次/root/.profileをご検討ください:`export PS1 = 'value'`はrootの(Korn)サブシェルに伝播しませんか?

export PS1=value1 
export x=value2 

ログインシェルが期待されるプロンプト(値2などと$ X)を示してどのように来る、サブシェルが」とPS1値2として$ xを示しておくが、$ながら、 # '?ただの場合、私はOpenBSDの下でこれを試しています。

[ええ、私は知っています...私はこれを知らない場合、私はOpenBSDで何をしていますか?ちょうど孤立した、まったく無作為なVM =)。]

答えて

1

場合、誰かが最終的にこのin an OpenBSD mailing listを説明しました。この動作は、OpenBSDで実際に期待されているように、/usr/src/bin/ksh/main.cのコメントで説明されています。

safe_prompt = ksheuid ? "$ " : "# "; 
{ 
    struct tbl *vp = global("PS1"); 

    /* Set PS1 if it isn't set, or we are root and prompt doesn't 
    * contain a # or \$ (only in ksh mode). 
    */ 
    if (!(vp->flag & ISSET) || 
     (!ksheuid && !strchr(str_val(vp), '#') && 
     (Flag(FSH) || !strstr(str_val(vp), "\\$")))) 
     /* setstr can't fail here */ 
     setstr(vp, safe_prompt, KSH_RETURN_ERROR); 
} 
3

あなたのサブシェルがPS1をリセットしている何かを調達しているからです。

これをデバッグするには、ksh -xを試してください。それでも問題が解決しない場合は、kshstrace or an equivalentシステムコールトレースツールで実行してみてください。

+0

ご返信ありがとうございます。 .profileはこれらの2つの行だけで構成され、/ rootの下に.kshrcはありません。このソーシングがどこでいつ行われるのかについてのアイデアはありますか? –

+0

@ user319845 Aは答えにいくつかのデバッグのヒントを追加しました。 –

1

不正なPS1の割り当てについては、次のファイルを確認してください。そのマニュアルページにタイプミスがあるかもしれません

/etc/profile 
      The system wide initialization file, executed for login shells. 
    $HOME/.profile 
      The personal initialization file, executed for login shells 
      after /etc/profile. 
    $HOME/..kshrc 
      Default personal initialization file, executed for interactive 
      shells when ENV is not set. 
    /etc/suid_profile 
      Alternative initialization file, executed when instead of per- 
      sonal initialization file when the real and effective user or 
      group id do not match. 

は、それはおそらく言うことを意味:誰でも興味を持っている$HOME/.kshrc

+0

ありがとう!残念ながら、/ etc/profile、/root/.kshrc、/ etc/suid_profileはまったく存在しないので、そこには運がありません。私はPSがとても謎めいているとは決して考えなかった! –

関連する問題