Comment configurez-vous l'environnement pour es?

10

J'ai joué avec es ces derniers jours, et il (comme rc) a la particularité / qu'il n'exécute son script de démarrage ( .esrc) qu'à la connexion. La façon habituelle d'exécuter du code dans chaque session interactive est de mettre ce code dans la %promptfonction.

Bien sûr, il n'y a pas de %promptfonction si elle es -ln'a jamais été exécutée.

Donc, la question: comment définir l'environnement de connexion lorsque vous entrez via gdm ou similaire, qui ne source que .profile (ou .xprofile, .xsession, etc.)? Le meilleur que j'ai trouvé est:

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

Ce qui semble ... horrible. De meilleures approches?

james.haggerty
la source
Je suppose que ce esn'est pas votre shell de connexion. Qu'en est- il mise alias es='es -l'en .bashrc?
cjm
esest mon shell de connexion. Désolé si je n'ai pas précisé cela. Mais les shells de connexion ne sont pas exécutés dans les sessions X avant le lancement des terminaux, du moins pour autant que je sache.
james.haggerty
J'utilise bashpas es. Mais lorsque j'ouvre une nouvelle fenêtre de terminal, elle fonctionne bashcomme un shell de connexion.
cjm
Au moins avec la plupart des terminaux X, il s'agit d'une option qui est désactivée par défaut (comme il se doit, IMO). Alors oui, c'est une solution de contournement, mais il n'y a aucune raison que ce truc devrait être exécuté plusieurs fois alors qu'il pourrait être exécuté une fois.
james.haggerty
Hmm, je ne suis pas sûr d'être d'accord avec ton montage, Gilles. Pourquoi pensez-vous que cela ne s'applique qu'à es? (et pas * csh ou rc ou ...?) Et pourquoi supprimer gdm et lightdm, puisque ce sont eux qui contrôlent l'environnement?
james.haggerty

Réponses:

1

Puisque personne n'a de vraie réponse, voici mon horrible hack. Certains shells (* rxvt par exemple) ont des paramètres qui permettent de forcer un shell de connexion. Donc, dans votre .Xdefaults, vous pouvez ajouter quelque chose de semblable à

urxvt256c-ml:loginShell: true

Ce qui signifie que tous les urxvt256c-mlterminaux que vous lancez auront un shell de connexion par défaut.

Est-ce que cela vous aide?

Sardathrion - contre les abus SE
la source
Eh bien, étant une personne ennuyeuse (voir les commentaires ci-dessus?), Je dirai que je le savais déjà. C'est une question de savoir si ce code ou mon code légèrement dérangeant est une meilleure option; l'un manque d'élégance conceptuelle (je prétends que je me connecte pour chaque terminal, lorsque je crée des centaines sur une seule connexion réelle?), l'autre manque d'élégance de mise en œuvre (mais je pense vraiment que l'environnement doit être configuré lors de la connexion).
james.haggerty
Ah, je vois ce que tu veux dire maintenant. Personnellement, je considère qu'un terminal est une unité de connexion et non l'environnement X11, il est donc logique pour moi d'être connecté trois fois si j'ai trois terminaux ouverts. Je vais laisser la réponse ici juste au cas où elle serait utile pour les autres - voyons combien de votes négatifs sont attirés. ^ _ ~
Sardathrion - contre les abus SE