Chà, về "Đăng nhập đồ họa", nó phụ thuộc vào * DM bạn sử dụng ...
Với GDM (Gnome 3.18) tôi có điều này:
/ 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"
Vì vậy, ~ / .profile có nguồn gốc khi đăng nhập bằng cách sử dụng / bin / sh chứ không phải / bin / bash
Có hai trường hợp
- / bin / sh được liên kết với / bin / bash nhưng chạy ở chế độ "POSIX / Bourne"
- / bin / sh là / bin / dash (debian / ubfox). Nhanh nhất nhưng có ít tính năng hơn (hỗ trợ ShellShock;) )
Vì vậy, cấu hình / bin / sh là ~ / .profile chứ không phải ~ / .bash_profile, ~ / .zprofile
Tập tin này nên được sử dụng cho các cài đặt "vỏ bất khả tri" , như các biến đường dẫn và môi trường.
KHÔNG nên có chương trình thực thi cho tương tác người dùng chỉ đăng nhập nhưng ở đây (kiểm tra thư, vận may, v.v ...)
RC ~ /.* chỉ dành cho các phiên "tương tác" (ví dụ bí danh ...)
Có một sự khác biệt giữa bash và zsh cho shell đăng nhập tương tác
các nguồn bash chỉ .bash_profile, trong khi các nguồn zsh theo thứ tự:
- ~ / .zprofile
- ~ / .zshrc
- ~ / zlogin (ở đây có các bí danh được xác định trong ~ / .zshrc. Trong trường hợp shell "tương tác" + "đăng nhập"
Cách làm đúng ~ / .bash_profile đã được trả lời ở đây:
Sự khác biệt giữa .bashrc và .bash_profile
if [ -r ~/.profile ]; then . ~/.profile; fi
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac
Để kích hoạt kiểm tra (và định hình), bạn có thể sử dụng
~ / .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`
# ------------------------------------------------
sau đó, để kiểm tra:
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
Vì vậy, RVM / virtualenv nên vào ~ / .profile, IMHO
Nhưng điều này KHÔNG LÀM VIỆC , đôi khi ...
Chẳng hạn, virualenvwrapper chỉ hoạt động nếu shell chạy Xsession là một bash "gốc" (xuất BASH_VERSION)
Nếu bạn đang sử dụng hệ thống gạch ngang , biến môi trường và cài đặt đường dẫn hoạt động, nhưng định nghĩa hàm virualenvwrapper không hoạt động vì tập lệnh không tuân thủ POSIX.
Kịch bản không đưa ra bất kỳ lỗi nào nhưng nó kết thúc mà không có bất kỳ định nghĩa "workon" nào .
Vì vậy, bạn có thể thiết lập môi trường trong tay ~ / .profile , chỉ để cho phép thực thi python chính xác từ máy khách bắt đầu trực tiếp từ 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-sding-up-your-computer-virtualenvwrapper-linux-all
Nhưng đối với virualenvwrapper bạn có hai lựa chọn thay thế:
- nguồn nó trong ~ / .bash_profile hoặc ~ / .zprofile (hoặc ~ / .zlogin) khi thiết bị đầu cuối hoạt động như vỏ đăng nhập
- bao gồm tập lệnh trong ~ / .bashrc hoặc ~ / zshrc
Điều này có nghĩa là các máy khách X (ví dụ emacs) nên được khởi động từ vỏ thiết bị đầu cuối chứ không phải từ đồ họa!
"Tôi không thể có được sự hài lòng ..."