มีไฟล์เทียบเท่า“ .bashrc” ที่เชลล์อ่านทั้งหมดหรือไม่


105

เป็น~/.bashrc สถานที่เดียวในการระบุตัวแปรสภาพแวดล้อมเฉพาะผู้ใช้นามแฝงการปรับเปลี่ยนPATHตัวแปร ฯลฯ ?

ฉันถามเพราะดูเหมือนว่า~/.bashrcจะเป็นbash- แบบเดียว แต่มีกระสุนชนิดอื่นอยู่ด้วย ...

คำตอบ:


94

ไฟล์$HOME/.profileถูกใช้โดยเชลล์จำนวนหนึ่งรวมถึง bash, sh, dash และอื่น ๆ

จากหน้าคนทุบตี:

เมื่อ bash ถูกเรียกใช้เป็นเชลล์ล็อกอินแบบโต้ตอบ ... ก่อนอื่นให้อ่านและดำเนินการคำสั่งจากไฟล์ / etc / profile หากไฟล์นั้นมีอยู่ หลังจากอ่านไฟล์นั้นจะค้นหา ~ / .bash_profile, ~ / .bash_login และ ~ / .profile ตามลำดับและอ่านและเรียกใช้คำสั่งจากไฟล์แรกที่มีอยู่และอ่านได้

csh และ tcsh อย่างชัดเจนไม่ได้ดู~/.profileแต่เปลือกเหล่านั้นเป็นชนิดโบราณ


7
Zsh ตามค่าเริ่มต้นจะไม่อ่าน. profile นั่นเป็นเหตุผลที่ฉันลบคำตอบก่อนหน้าของฉันที่ระบุนี้ Zsh อ่าน. profile เท่านั้นเมื่อมีการเรียกใช้โดยลิงก์สัญลักษณ์ชื่อ sh
fschmitt

10
tcsh ยังคงเป็นที่นิยมในสภาพแวดล้อมบางอย่าง
Maciej Piechotka

1
fschmitt: ขอบคุณสำหรับการแก้ไข; แก้ไขแล้ว. Maciej Piechotka: ฉันไม่สงสัยเลยว่าเป็นเรื่องจริง อย่างไรก็ตามยังเป็นไปได้ (แม้ว่าจะซับซ้อน) ในการสร้าง * สคริปต์ rc ที่นำเข้าสคริปต์ rc อื่น ๆ โดยเฉพาะตามเชลล์ที่ใช้งานอยู่
msw

1
สำหรับวิธีการทำงานผู้ใช้จำเป็นต้องตรวจสอบให้แน่ใจว่าแต่ละเชลล์เป็นเชลล์ล็อกอิน ยกตัวอย่างเช่นใน Gnome เทอร์มิให้ไปที่รายละเอียด -> Run command as a login shellชื่อและคำสั่งและเปิดใช้งาน นอกจากนี้คุณยังจะต้องลบหรือทำให้แหล่งที่มา~/.bash_profile ~/.profile
มิเคล

@fschmitt คุณยังสามารถแหล่ง$HOME/.profileจากภายใน Zsh ของคุณ.zshrcได้เช่นกัน ฉันมักจะใส่เปลือกแบบพกพาของฉันทั้งหมด.profileแล้วฉันสามารถแบ่งปันกับสภาพแวดล้อมใด ๆ ที่ฉันอาจกระโดดระหว่าง
Benjamin R

56

~/.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


อย่าลืม zsh ยังมีส่วน.zloginเสริม.zprofileที่ทำงานหลังจากนั้น .zshrc (แต่สำหรับเชลล์ล็อกอินเท่านั้น) ดูคำถามที่พบบ่อย ZSH
Geeb

21

ไม่มีไฟล์ทั่วไป แต่คุณสามารถทำให้ทุกเชลล์อ่านจากไฟล์ทั่วไป

  1. bashอ่านจาก.bash_profileหรือ.bashrc
  2. zshอ่านจาก.zprofile และ .zshrc
  3. 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รายการเท่านั้น

ข้อมูลเพิ่มเติม:


14

ไม่มีสิ่งใดที่เหมือนกับไฟล์ปรับแต่งสภาพแวดล้อมสำหรับเชลล์ที่แตกต่างกันเพราะแม้แต่เชลล์จะระบุวิธีที่กำหนดไว้

ใน csh คุณใช้setenvใน bash คุณใช้exportเพื่อกำหนดพวกเขา

อย่างไรก็ตามคุณสามารถเขียนไฟล์ปรับแต่งของคุณเองและรวมไว้sourceใน dotfiles ของเชลล์ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.