Що ж, про "Графічні входи", це залежить від того, який * DM ви використовуєте ...
З GDM (Gnome 3.18) у мене є таке:
/ 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"
Отже, ~ / .profile отримується у вході за допомогою / bin / sh, а не / bin / bash
Є два випадки
- / bin / sh пов'язано з / bin / bash, але працює в режимі "POSIX / Bourne"
- / bin / sh є / bin / dash (debian / ubuntu). Найшвидший, але з меншими можливостями (підтримка ShellShock;) )
Отже, профіль / bin / sh - це ~ / .profile, а не ~ / .bash_profile, ~ / .zprofile
Цей файл слід використовувати для параметрів "агностичного оболонки" , таких як змінні шляху та середовища.
Жодної виконуваної програми для взаємодії з користувачем не повинно бути, але тут (перевірка пошти, фортуна тощо).
~ /.* rc призначені лише для "інтерактивних" сеансів (псевдоніми, наприклад ...)
Існує різниця між bash і zsh для інтерактивних оболонок для входу
тільки джерела bash .bash_profile, тоді як джерела zsh у порядку:
- ~ / .zprofile
- ~ / .zshrc
- ~ / zlogin (тут доступні псевдоніми, визначені в ~ / .zshrc. у випадку оболонок "інтерактивного" + "входу"
Тут відповіли правильний спосіб ~ / .bash_profile :
Різниця між .bashrc і .bash_profile
if [ -r ~/.profile ]; then . ~/.profile; fi
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac
Щоб увімкнути тест (і профілювання), ви можете використовувати це
~ / .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`
# ------------------------------------------------
потім для тестування:
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
Тож RVM / virtualenv повинен увійти в ~ / .profile, IMHO
Але це НЕ ПРАЦЮЄ , іноді ...
Наприклад, virualenvwrapper працює лише в тому випадку, якщо оболонка, що працює з Xsession, є "оригінальним" башем (експорт BASH_VERSION)
Якщо ви перебуваєте в системі тире , змінна середовища та налаштування шляху працюють, але визначення функції virualenvwrapper не працює, оскільки сценарій не сумісний з POSIX.
Сценарій не дає жодних помилок, але він закінчується без будь-якого визначення "робочого" .
Таким чином, ви можете встановити навколишнє середовище в ~ / .profile , просто щоб увімкнути правильне виконання python від клієнта, запущеного безпосередньо з 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/isissue/9061991-setting-up-your-computer-virtualenvwrapper-linux-all
Але для virualenvwrapper у вас є дві альтернативи:
- джерело його в ~ / .bash_profile або ~ / .zprofile (або ~ / .zlogin), коли термінал виконує функцію оболонки входу
- включіть скрипт у ~ / .bashrc або ~ / zshrc
Це означає, що клієнтів X (наприклад, emacs) слід запускати з термінальної оболонки, а не з графічної!
"Я не можу отримати задоволення ..."