เป็น~/.bashrc
สถานที่เดียวในการระบุตัวแปรสภาพแวดล้อมเฉพาะผู้ใช้นามแฝงการปรับเปลี่ยนPATH
ตัวแปร ฯลฯ ?
ฉันถามเพราะดูเหมือนว่า~/.bashrc
จะเป็นbash
- แบบเดียว แต่มีกระสุนชนิดอื่นอยู่ด้วย ...
เป็น~/.bashrc
สถานที่เดียวในการระบุตัวแปรสภาพแวดล้อมเฉพาะผู้ใช้นามแฝงการปรับเปลี่ยนPATH
ตัวแปร ฯลฯ ?
ฉันถามเพราะดูเหมือนว่า~/.bashrc
จะเป็นbash
- แบบเดียว แต่มีกระสุนชนิดอื่นอยู่ด้วย ...
คำตอบ:
ไฟล์$HOME/.profile
ถูกใช้โดยเชลล์จำนวนหนึ่งรวมถึง bash, sh, dash และอื่น ๆ
จากหน้าคนทุบตี:
เมื่อ bash ถูกเรียกใช้เป็นเชลล์ล็อกอินแบบโต้ตอบ ... ก่อนอื่นให้อ่านและดำเนินการคำสั่งจากไฟล์ / etc / profile หากไฟล์นั้นมีอยู่ หลังจากอ่านไฟล์นั้นจะค้นหา ~ / .bash_profile, ~ / .bash_login และ ~ / .profile ตามลำดับและอ่านและเรียกใช้คำสั่งจากไฟล์แรกที่มีอยู่และอ่านได้
csh และ tcsh อย่างชัดเจนไม่ได้ดู~/.profile
แต่เปลือกเหล่านั้นเป็นชนิดโบราณ
Run command as a login shell
ชื่อและคำสั่งและเปิดใช้งาน นอกจากนี้คุณยังจะต้องลบหรือทำให้แหล่งที่มา~/.bash_profile
~/.profile
$HOME/.profile
จากภายใน Zsh ของคุณ.zshrc
ได้เช่นกัน ฉันมักจะใส่เปลือกแบบพกพาของฉันทั้งหมด.profile
แล้วฉันสามารถแบ่งปันกับสภาพแวดล้อมใด ๆ ที่ฉันอาจกระโดดระหว่าง
~/.profile
เป็นสถานที่ที่เหมาะสมสำหรับคำจำกัดความตัวแปรสภาพแวดล้อมและสำหรับโปรแกรมที่ไม่ใช่แบบกราฟิกที่คุณต้องการที่จะทำงานเมื่อคุณเข้าสู่ระบบ (เช่นssh-agent
, screen -m
) ถูกเรียกใช้งานโดยเชลล์ล็อกอินของคุณหากเป็นเชลล์สไตล์ Bourne (sh, ksh, bash) zsh ทำงาน~/.zprofile
แทนและ CSH ~/.login
และเรียกใช้
หากคุณเข้าสู่ระบบภายใต้ตัวจัดการการแสดงผล X (xdm, gdm, kdm, ... ) การ~/.profile
รันขึ้นอยู่กับว่าตัวจัดการการแสดงผลของคุณและสภาพแวดล้อมเดสก์ท็อปอาจถูกกำหนดค่าโดยการกระจายของคุณ หากคุณเข้าสู่ระบบภายใต้“เซสชั่นที่กำหนดเอง” ~/.xsession
ที่จะดำเนินการ
~/.bashrc
เป็นสถานที่ที่เหมาะสมสำหรับการตั้งค่าเฉพาะทุบตีเช่นนามแฝงฟังก์ชันตัวเลือกเชลล์และพรอมต์ ตามชื่อบ่งชี้มันเป็นเฉพาะกับทุบตี; csh มี~/.cshrc
, ksh มี~/.kshrc
และ zsh มี ~/.zshrc
<รัวกลอง>
ดูเพิ่มเติม:
ความแตกต่างระหว่าง. bashrc และ. bash_profile
ไฟล์การติดตั้งใดที่ควรใช้สำหรับการตั้งค่าตัวแปรสภาพแวดล้อมด้วย bash
Zsh ไม่ได้กดปุ่ม ~ / .profile
.zlogin
เสริม.zprofile
ที่ทำงานหลังจากนั้น .zshrc
(แต่สำหรับเชลล์ล็อกอินเท่านั้น) ดูคำถามที่พบบ่อย ZSH
ไม่มีไฟล์ทั่วไป แต่คุณสามารถทำให้ทุกเชลล์อ่านจากไฟล์ทั่วไป
bash
อ่านจาก.bash_profile
หรือ.bashrc
zsh
อ่านจาก.zprofile
และ .zshrc
ksh
อ่านจาก.profile
หรือ$ENV
ดังนั้นนี่คือสิ่งที่ฉันทำ:
~/.env
# Put environment variables here, e.g.
PATH=$PATH:$HOME/bin
~/.shrc
test -f "$HOME/.env" && . "$HOME/.env"
# Put interactive shell setup here, e.g.
alias ll='ls -l'
PS1='$PWD$ '
set -o emacs
~/.bashrc
test -f ~/.shrc && source ~/.shrc
# Put any bash-specific settings here, e.g.
HISTFILE=~/.bash_history
shopt -s extglob
IGNOREEOF=yes
~/.zshenv
# Put any zsh-specific settings for non-interactive and interactive sessions, e.g.
setopt braceexpand
setopt promptsubst
setopt shwordsplit
~/.zshrc
test -f ~/.shrc && source ~/.shrc
# Put any zsh-specific interactive settings here, e.g.
HISTFILE=~/.zsh_history
setopt ignoreeof
~/.profile
# Interactive sub-shells source .env, unless this is bash or zsh,
# because they already sourced .env in .bashrc or .zshrc.
if test -z "$BASH_VERSION" -a -z "$ZSH_VERSION" || test -n "$BASH_VERSION" -a \( "${BASH##*/}" = "sh" \)
then
test -f "$HOME"/.env && . "$HOME"/.env
fi
# The name is confusing, but $ENV is ksh's config file for interactive sessions,
# so it's equivalent to .bashrc or .zshrc.
# Putting this here makes running an interactive ksh from any login shell work.
test -f "$HOME"/.shrc && export ENV="$HOME"/.shrc
# Put any login shell specific commands here, e.g.
ssh-add
stty -ixon
~/.bash_profile
source ~/.bashrc
source ~/.profile
~/.zlogin
# zsh sources .zshrc automatically, only need to source .profile
source ~/.profile
~/.zprofile
(empty)
pam_env
หากคุณมีการเข้าถึงรากไปยังระบบอีกวิธีหนึ่งคือการตั้งค่า
คุณสามารถใส่
session optional pam_env.so user_envfile=.env
ในที่เกี่ยวข้อง/etc/pam.d
ไฟล์ (เช่น/etc/pam.d/common-session
ใน Debian) และจากนั้นเมื่อผู้ใช้บันทึกในจะอ่านจากตัวแปรสภาพแวดล้อมPAM
~/.env
โปรดทราบว่าpam_env
โดยทั่วไปรองรับเฉพาะVAR=value
รายการเท่านั้น
ข้อมูลเพิ่มเติม:
ไม่มีสิ่งใดที่เหมือนกับไฟล์ปรับแต่งสภาพแวดล้อมสำหรับเชลล์ที่แตกต่างกันเพราะแม้แต่เชลล์จะระบุวิธีที่กำหนดไว้
ใน csh คุณใช้setenv
ใน bash คุณใช้export
เพื่อกำหนดพวกเขา
อย่างไรก็ตามคุณสามารถเขียนไฟล์ปรับแต่งของคุณเองและรวมไว้source
ใน dotfiles ของเชลล์ได้