您如何为es设置环境?


10

最近几天我一直在玩es,它(如rc)具有一个怪癖/功能,即它仅.esrc在登录时运行其启动脚本()。在每个交互式会话中运行代码的通常方法是将该代码放入%prompt函数中。

当然,%prompt如果es -l从未运行过,则没有任何功能。

那么,问题来了:当您通过gdm或类似资源(仅源.profile(或.xprofile,.xsession等))进入时,如何设置登录环境?我想出的最好的是:

if [ -f "$HOME/.esrc" ]; then
    eval "`es -l <<-x
        sh <<<'export -p'
    x`"
fi

这似乎令人震惊。有更好的方法吗?


我知道那es不是您的登录外壳。怎么样设置alias es='es -l'.bashrc
cjm 2012年

es是我的登录外壳。对不起,如果我不清楚。但是至少在我所知的范围内,在启动终端之前,登录shell不会在X会话中运行。
james.haggerty 2012年

我用bash,不用es。但是,当我打开一个新的终端窗口时,它将bash作为登录外壳运行。
cjm 2012年

至少对于大多数X终端,此选项默认情况下是禁用的(应该​​是IMO)。因此,是的,这是一种解决方法,但是没有理由在可以一次运行时将其运行多次。
james.haggerty 2012年

嗯,不确定我同意您的编辑,吉尔斯。您为什么认为这仅适用于es?(而不是* csh或rc或...?),为什么要删除gdm和lightdm,因为它们是控制环境的代码?
james.haggerty 2012年

Answers:


1

由于没有人能提供真正的答案,因此这是我的骇人听闻之道。某些外壳程序(例如* rxvt)具有允许强制登录外壳程序的设置。因此,.Xdefaults您可以在中添加类似于

urxvt256c-ml:loginShell: true

这意味着urxvt256c-ml默认情况下,您启动的所有终端都将具有登录外壳。

这些帮助有用?


好吧,作为一个讨厌的人(请参阅上面的评论?),我会说我已经知道这一点。是否将此代码或我的稍微令人不安的代码更好是一个选择。一个缺乏概念上的优雅(我声称我在每个终端上都登录,当我在一个真实的登录上创建100个登录?),另一个缺乏实现上的优雅(但是我真的觉得应该在登录时设置环境)。
james.haggerty 2012年

啊,我明白你的意思了。就我个人而言,我认为终端是登录单元,而不是X11环境,因此,如果我打开了三个终端,则对我来说应该进行三次登录。我将在这里留下答案,以防万一它对其他人有用-让我们看看能吸引多少不赞成票。^ _〜
Sardathrion -对SE滥用
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.