क्या सभी गोले द्वारा एक ".bashrc" समकक्ष फ़ाइल पढ़ी जाती है?


105

~/.bashrc उपयोगकर्ता विशिष्ट पर्यावरण चर, उपनाम, PATHचर में संशोधन आदि को निर्दिष्ट करने के लिए एकमात्र स्थान है ?

मैं पूछता हूं क्योंकि ऐसा लगता है कि ~/.bashrcऐसा प्रतीत होता है bash, लेकिन अन्य गोले भी मौजूद हैं ...

जवाबों:


93

फ़ाइल $HOME/.profileका उपयोग कई गोले द्वारा किया जाता है, जिसमें बैश, श, डैश और संभवतः अन्य शामिल हैं।

बैश मैन पेज से:

जब बैश को एक इंटरेक्टिव लॉगिन शेल के रूप में आमंत्रित किया जाता है, ... यह पहले फाइल / etc / प्रोफाइल से कमांड को पढ़ता है और निष्पादित करता है, यदि यह फाइल मौजूद है। उस फ़ाइल को पढ़ने के बाद, यह उस क्रम में ~ / .bash_profile, ~ / .bash_login और ~ / .profile की तलाश करता है, और पहले मौजूद से कमांड पढ़ता और कार्यान्वित करता है जो कि पढ़ने योग्य है।

csh और tcsh स्पष्ट रूप से नहीं दिखते हैं, ~/.profileलेकिन उन गोले थोड़े प्राचीन हैं।


7
डिफ़ॉल्ट रूप से Zsh .profile नहीं पढ़ता है। इसलिए मैंने इसे बताते हुए अपना पिछला उत्तर हटा दिया। Zsh केवल तभी पढ़ता है। जब इसे sh नाम के एक प्रतीकात्मक लिंक द्वारा आमंत्रित किया जाता है।
fschmitt

10
tcsh अभी भी कुछ वातावरण में लोकप्रिय है।
Maciej Piechotka

1
fschmitt: सुधार के लिए धन्यवाद; तय की। मैकीज पीचोटका: मुझे इसमें कोई संदेह नहीं है कि यह सच है; हालाँकि, यह संभव है (हालांकि जटिल) बनाने के लिए * rc स्क्रिप्ट जो विशेष रूप से अन्य आरसी स्क्रिप्ट को आयात करती हैं जो कि उनके द्वारा चलाए जा रहे शेल के आधार पर होती हैं।
msw

1
काम करने के इस तरीके के लिए, उपयोगकर्ताओं को यह सुनिश्चित करना होगा कि प्रत्येक शेल एक लॉगिन शेल है। उदाहरण के लिए, गनोम टर्मिनल में, प्रोफाइल -> शीर्षक और कमांड पर जाएं, और सक्षम करें Run command as a login shell। आपको ~/.bash_profileइसे हटाने या इसे स्रोत बनाने की भी आवश्यकता है ~/.profile
मिकेल

@fschmitt आप $HOME/.profileअपने Zsh के अंदर से भी स्रोत बना सकते .zshrcहैं। मैं अपनी सभी पोर्टेबल शेल चीजों को अंदर रखना चाहता हूं .profileऔर फिर मैं इसे किसी भी वातावरण के आसपास साझा कर सकता हूं, जिनके बीच मैं आशा कर सकता हूं।
बेंजामिन आर

56

~/.profileपर्यावरण चर परिभाषाओं के लिए और गैर-ग्राफिकल कार्यक्रमों के लिए सही जगह है जो आप लॉग इन करते समय चलाना चाहते हैं (जैसे ssh-agent, screen -m)। यदि यह एक बॉर्न-शैली शेल (श, ksh, bash) है, तो इसे आपके लॉगिन शेल द्वारा निष्पादित किया जाता है। ~/.zprofileइसके बजाय Zsh चलता है , और Csh और tsh चला जाता है ~/.login

यदि आप एक एक्स डिस्प्ले मैनेजर (एक्सडीएम, जीडीएम, केडीएम, ...) के तहत लॉग इन करते हैं, तो क्या ~/.profileचलाया जाता है यह निर्भर करता है कि आपके डिस्ट्रीब्यूशन मैनेजर और शायद डेस्कटॉप वातावरण आपके वितरण द्वारा कैसे कॉन्फ़िगर किए गए थे। यदि आप एक "कस्टम सत्र" के तहत लॉग इन करते हैं, जो आमतौर पर निष्पादित होता है ~/.xsession

~/.bashrcयह बैश-विशिष्ट सेटिंग्स के लिए सही जगह है, जैसे कि उपनाम, फ़ंक्शन, शेल विकल्प और संकेत। जैसा कि नाम इंगित करता है, यह बैश करने के लिए विशिष्ट है; csh है ~/.cshrc, ksh है ~/.kshrc, और zsh है <ढोलकिया> ~/.zshrc

इन्हें भी देखें:
.bashrc और .bash_profile के बीच का अंतर
बैश के साथ पर्यावरण चर स्थापित करने के लिए कौन सी सेटअप फ़ाइलों का उपयोग किया जाना चाहिए?
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डेबियन पर), और फिर जब उपयोगकर्ता लॉग इन करता है, PAMतो पर्यावरण चर को पढ़ेगा ~/.env

ध्यान दें कि pam_envमूल रूप से केवल VAR=valueप्रविष्टियों का समर्थन करता है ।

और जानकारी:


14

विभिन्न गोले के लिए एक पर्यावरण विन्यास फाइल जैसी कोई चीज नहीं है, क्योंकि इसका विशिष्ट शेल भी परिभाषित है कि वे कैसे परिभाषित हैं।

Csh में आप setenvबैश में उपयोग exportकरते हैं आप उन्हें परिभाषित करने के लिए उपयोग करते हैं।

वैसे भी आप अपनी खुद की कॉन्फिग फाइल लिख सकते हैं और इसे sourceअपने गोले के डॉटफाइल्स में शामिल कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.