好吧,关于“图形登录”,取决于您使用哪个* 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
此文件应用于“外壳不可知”设置,例如路径和环境变量。
NO进行登录,只有用户交互的可执行程序应该是,但这里(邮件检查,财富,等...)
〜/.* rc仅用于“交互式”会话(例如别名...)
bash和zsh的交互式登录 Shell 有所不同
bash仅源.bash_profile,而zsh按以下顺序源:
- 〜/ .zprofile
- 〜/ .zshrc
- 〜/ zlogin(在〜/ .zshrc中定义的别名是可用的。如果是“ interactive” +“ login” shell
在这里回答了正确的〜/ .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中,恕我直言
但是,这也不行,有时 ...
例如,仅当运行Xsession的shell是“原始” bash(导出BASH_VERSION)时,virualenvwrapper才有效
如果您在仪表板上,则环境变量和路径设置有效,但是virualenvwrapper函数定义不起作用,因为该脚本不符合POSIX。
该脚本没有给出任何错误,但是没有任何“ workon”定义就可以结束。
因此,您可以在〜/ .profile中设置环境,只是为了从直接从X启动的客户端中启用正确的python执行:
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
但是对于virualenvwrapper,您有两种选择:
- 当终端充当登录外壳时,将其从〜/ .bash_profile或〜/ .zprofile(或〜/ .zlogin)中提供
- 将脚本包含在〜/ .bashrc或〜/ zshrc中
这意味着应该从终端外壳而不是图形外壳启动X客户端(例如,emacs)!
“我不能不满意……”