Nun, bei "Grafischen Logins" kommt es darauf an, welche * DM Sie verwenden ...
Mit GDM (Gnome 3.18) habe ich folgendes:
/ etc / gdm / Xsession
#!/bin/sh <= *important*
...
# First read /etc/profile and .profile
test -f /etc/profile && . /etc/profile
test -f "$HOME/.profile" && . "$HOME/.profile"
# Second read /etc/xprofile and .xprofile for X specific setup
test -f /etc/xprofile && . /etc/xprofile
test -f "$HOME/.xprofile" && . "$HOME/.xprofile"
Also wird ~ / .profile in login mit / bin / sh und nicht mit / bin / bash bezogen
Es gibt zwei Fälle
- / bin / sh ist mit / bin / bash verknüpft, wird jedoch im "POSIX / Bourne" -Modus ausgeführt
- / bin / sh ist / bin / dash (debian / ubuntu). Am schnellsten, aber mit weniger Funktionen (ShellShock-Unterstützung;) )
Das / bin / sh-Profil ist also ~ / .profile und nicht ~ / .bash_profile, ~ / .zprofile
Diese Datei sollte für "Shell Agnostic" -Einstellungen wie Pfad- und Umgebungsvariablen verwendet werden.
KEIN ausführbares Programm für die Nur-Login-Benutzerinteraktion sollte aber hier sein (Mailcheck, Fortune, etc ...)
Die ~ / .* rc sind nur für "interaktive" Sitzungen gedacht (zum Beispiel Aliase ...)
Bei interaktiven Login- Shells gibt es einen Unterschied zwischen bash und zsh
Bash-Quellen nur .bash_profile, während Zsh-Quellen in der Reihenfolge:
- ~ / .zprofile
- ~ / .zshrc
- ~ / zlogin (hier sind in ~ / .zshrc definierte Aliase verfügbar. Bei "interaktiven" + "Login" - Shells
Die richtige Vorgehensweise für ~ / .bash_profile wurde hier beantwortet:
Unterschied zwischen .bashrc und .bash_profile
if [ -r ~/.profile ]; then . ~/.profile; fi
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac
Zum Aktivieren von Test (und Profilerstellung) können Sie dies verwenden
~ / .bash_profile:
#!/bin/bash
# ------------------------------------------------
export _DOT_BASH_PROFILE_0=`date --rfc-3339=ns`
# ------------------------------------------------
if [ -f ~/.profile ] ; then
. ~/.profile
fi
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac
# ------------------------------------------------
export _DOT_BASH_PROFILE_1=`date --rfc-3339=ns`
# ------------------------------------------------
~ / .zprofile:
#!/bin/zsh
# ------------------------------------------------
export _DOT_ZSH_PROFILE_0=`date --rfc-3339=ns`
# ------------------------------------------------
if [ -f ~/.profile ] ; then
. ~/.profile
fi
# no need to source, zsh already handle ~/.zshrc
###case "$-" in *i*) if [ -r ~/.zshrc ]; then . ~/.zshrc; fi;; esac
# ------------------------------------------------
export _DOT_ZSH_PROFILE_1=`date --rfc-3339=ns`
# ------------------------------------------------
dann zum testen:
chsh -s /bin/bash
ssh localhost
env
exit
ssh localhost env
ssh -t localhost bash -i -c env
chsh -s /bin/zsh
ssh localhost
env
exit
ssh localhost env
ssh -t localhost bash -i -c env
Also sollte RVM / virtualenv in ~ / .profile gehen, IMHO
Aber das funktioniert nicht , manchmal ...
Beispielsweise funktioniert virualenvwrapper nur, wenn die Shell, auf der Xsession ausgeführt wird, eine "ursprüngliche" Bash ist (Export von BASH_VERSION).
Wenn Sie sich auf einem Dash- System befinden, funktionieren die Umgebungsvariable und die Pfadeinstellung , die Definition der virualenvwrapper- Funktion funktioniert jedoch nicht, da das Skript nicht POSIX-kompatibel ist.
Das Skript gibt keinen Fehler aus, endet jedoch ohne "Workon" -Definition.
Sie können also die Umgebung in ~ / .profile festlegen , um die korrekte Python-Ausführung vom Client aus zu ermöglichen, der direkt von X aus gestartet wurde:
export VIRTUAL_ENV="/home/mike/var/virtualenvs/myvirtualenv"
export PATH="$VIRTUAL_ENV/bin:$PATH"
unset PYTHON_HOME
https://gist.github.com/datagrok/2199506
https://www.bountysource.com/issues/9061991-setting-up-your-computer-virtualenvwrapper-linux-all
Für virualenvwrapper gibt es jedoch zwei Alternativen:
- Quell es in ~ / .bash_profile oder ~ / .zprofile (oder ~ / .zlogin), wenn das Terminal als Login-Shell fungiert
- Fügen Sie das Skript in ~ / .bashrc oder ~ / zshrc ein
Dies bedeutet, dass X-Clients (z. B. Emacs) von der Terminal-Shell aus gestartet werden sollten und nicht von der grafischen!
"Ich kann keine Befriedigung bekommen ..."