Wie richten Sie die Umgebung für es ein?

10

Ich habe in den letzten Tagen mit es gespielt und es hat (wie rc) die Eigenart / Funktion, dass es sein Startskript ( .esrc) nur beim Anmelden ausführt. Die übliche Methode zum Ausführen von Code in jeder interaktiven Sitzung besteht darin, diesen Code in die %promptFunktion einzufügen.

Natürlich gibt es keine %promptFunktion, wenn sie es -lnoch nie ausgeführt wurde.

Die Frage lautet also: Wie stellen Sie die Anmeldeumgebung ein, wenn Sie über gdm oder ähnliches eintreten, das nur .profile (oder .xprofile, .xsession usw.) enthält? Das Beste, was ich mir ausgedacht habe, ist:

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

Welches scheint ... schrecklich. Irgendwelche besseren Ansätze?

james.haggerty
quelle
Ich nehme an, das esist nicht Ihre Login-Shell. Was ist Einstellung alias es='es -l'in .bashrc?
cjm
esist meine Login-Shell. Entschuldigung, wenn ich das nicht klargestellt habe. Aber Login-Shells werden nicht in X-Sitzungen ausgeführt, bevor Terminals gestartet werden, zumindest soweit ich weiß.
James.haggerty
Ich benutze bashnicht es. Wenn ich jedoch ein neues Terminalfenster öffne, wird es bashals Anmeldeshell ausgeführt.
cjm
Zumindest bei den meisten X-Terminals ist dies eine Option, die standardmäßig deaktiviert ist (wie es sein sollte, IMO). Also ja, es ist eine Problemumgehung, aber es gibt keinen Grund, warum dieses Zeug mehrmals ausgeführt werden sollte, wenn es einmal ausgeführt werden könnte.
James.haggerty
Hmm, ich bin mir nicht sicher, ob ich Ihrer Bearbeitung zustimme, Gilles. Warum gilt das Ihrer Meinung nach nur für es? (und nicht * csh oder rc oder ...?) Und warum gdm und lightdm entfernen, da sie die Umgebung kontrollieren?
James.haggerty

Antworten:

1

Da niemand eine echte Antwort hat, ist hier mein schrecklicher Hack. Einige Shells (z. B. * rxvt) verfügen über Einstellungen, mit denen eine Anmeldeshell erzwungen werden kann. So können Sie in Ihrem .Xdefaultsetwas Ähnliches hinzufügen

urxvt256c-ml:loginShell: true

Dies bedeutet, dass alle von urxvt256c-mlIhnen gestarteten Terminals standardmäßig über eine Anmeldeshell verfügen.

Hilft das überhaupt?

Sardathrion - gegen SE-Missbrauch
quelle
Nun, da ich eine nervige Person bin (siehe Kommentare oben?), Sage ich, dass ich bereits davon wusste. Es ist eine Frage, ob dieser oder mein leicht störender Code eine bessere Option ist. ein fehlt konzeptuelle Eleganz (Ich behaupte , dass ich für jeden Terminal anmelden, wenn ich 100s über eine einzige echte Login erstellen?), die andere Implementierung Eleganz fehlt (aber ich fühle mich wirklich die Umwelt sollte eingerichtet bei der Anmeldung werden).
James.haggerty
Ah, ich verstehe, was du jetzt meinst. Persönlich betrachte ich ein Terminal als Anmeldeeinheit und nicht als X11-Umgebung. Daher ist es für mich sinnvoll, dreimal angemeldet zu sein, wenn drei Terminals geöffnet sind. Ich werde die Antwort hier lassen, nur für den Fall, dass sie für andere nützlich ist - mal sehen, wie viele Abwärtsstimmen angezogen werden. ^ _ ~
Sardathrion - gegen SE Missbrauch