เกี่ยวกับ "การเข้าสู่ระบบแบบกราฟิก" ขึ้นอยู่กับ * 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 is / 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 "ดั้งเดิม" (การส่งออก BASH_VERSION)
หากคุณอยู่ในระบบเส้นประตัวแปรสภาพแวดล้อมและการตั้งค่าเส้นทางจะทำงานได้ แต่การกำหนดฟังก์ชั่นvirualenvwrapperไม่ทำงานเนื่องจากสคริปต์ไม่สอดคล้องกับ POSIX
สคริปต์ไม่ได้ให้ข้อผิดพลาดใด ๆ แต่จะสิ้นสุดโดยไม่มีคำจำกัดความ"workon"
ดังนั้นคุณสามารถตั้งค่าสภาพแวดล้อมที่อยู่ใน~ / .profileเพียงเพื่อเปิดใช้งานการดำเนินการหลามที่ถูกต้องจากไคลเอนต์เริ่มต้นโดยตรงจาก 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
แต่สำหรับvirualenvwrapperคุณมีสองทางเลือก:
- หาแหล่งมาใน~ / .bash_profileหรือ~ / .zprofile (หรือ ~ / .zlogin) เมื่อเทอร์มินัลทำหน้าที่เป็นล็อกอินเชลล์
- รวมสคริปต์ใน~ / .bashrcหรือ~ / zshrc
ซึ่งหมายความว่าไคลเอนต์ X (เช่น emacs) ควรเริ่มต้นจากเทอร์มินัลเชลล์และไม่ใช่จากกราฟิกหนึ่ง!
"ฉันไม่สามารถรับความพึงพอใจไม่ได้ ... "