Cóż, jeśli chodzi o „Graficzne loginy”, zależy to od tego, jakiego * DM używasz ...
Z GDM (Gnome 3.18) mam to:
/ 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"
Więc ~ / .profile jest uzyskiwane podczas logowania przy użyciu / bin / sh, a nie / bin / bash
Istnieją dwa przypadki
- / bin / sh jest połączony z / bin / bash, ale działa w trybie „POSIX / Bourne”
- / bin / sh to / bin / dash (debian / ubuntu). Najszybszy, ale z mniejszą liczbą funkcji (obsługa ShellShock;) )
Zatem profil / bin / sh to ~ / .profile, a nie ~ / .bash_profile, ~ / .zprofile
Ten plik powinien być używany do ustawień „niezależnych od powłoki” , takich jak ścieżka i zmienne środowiskowe.
NO wykonywalny program do logowania-jedyne interakcji użytkownika powinno być, ale tutaj (sprawdzenie poczty, majątek, etc ...)
~ /.* rc są przeznaczone tylko do sesji „interaktywnych” (na przykład aliasy ...)
Istnieje różnica między bash i zsh dla interaktywnych powłok logowania
źródła bash tylko .bash_profile, podczas gdy źródła zsh w kolejności:
- ~ / .zprofile
- ~ / .zshrc
- ~ / zlogin (tutaj dostępne są aliasy zdefiniowane w ~ / .zshrc. w przypadku powłok „interaktywnych” + „login”)
Odpowiedzi na to, jak zrobić ~ / .bash_profile, tutaj:
Różnica między .bashrc i .bash_profile
if [ -r ~/.profile ]; then . ~/.profile; fi
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac
Aby włączyć test (i profilowanie), możesz użyć tego
~ / .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`
# ------------------------------------------------
następnie, aby przetestować:
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
Tak więc RVM / virtualenv powinien przejść do ~ / .profile, IMHO
Ale to NIE DZIAŁA , czasami ...
Na przykład virualenvwrapper działa tylko wtedy, gdy powłoka z uruchomionym Xsession jest „oryginalną” wersją bash (eksportowanie BASH_VERSION)
Jeśli jesteś na desce rozdzielczej systemu, zmienna i praca ustawienie ścieżki, ale virualenvwrapper definicja funkcji nie działają, ponieważ skrypt nie jest zgodny z POSIX.
Skrypt nie podaje żadnego błędu, ale kończy się bez definicji „workon” .
Możesz więc ustawić dostępne środowisko w ~ / .profile , aby umożliwić prawidłowe wykonanie Pythona z klienta uruchomionego bezpośrednio z X:
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
Ale dla virualenvwrapper masz dwie alternatywy:
- źródło w ~ / .bash_profile lub ~ / .zprofile (lub ~ / .zlogin), gdy terminal działa jako powłoka logowania
- dołącz skrypt do ~ / .bashrc lub ~ / zshrc
Oznacza to, że klienci X (na przykład emacs) powinni być uruchamiani z powłoki terminala, a nie z graficznej!
„Nie mogę uzyskać satysfakcji ...”