वैश्विक bash_profile


20

मुझे लगता है कि वैश्विक पर्यावरण चर स्थापित करने के लिए फाइलें /etc/profileऔर /etc/bashrcफाइलें हैं और शायद मैं उनके उद्देश्यों को गलत समझ रहा हूं, लेकिन ...

क्या कोई वैश्विक bash_profileफ़ाइल है?

मैं मैक ओएस एक्स का उपयोग कर रहा हूं

जवाबों:


15

इसे नहीं कहा जाता है bash_profile, लेकिन वैश्विक बैश विन्यास के लिए मानक स्थान है /etc/bash.bashrc/etc/profileयदि शेल बैश है, तो इसे कॉल करना सामान्य है। उदाहरण के लिए, मेरे /etc/profileपास:

if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1=’0
    if [ f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  fi
fi

उपयोग के संदर्भ में, /etc/profileसभी बॉर्न संगत गोले (श, बश, क्श, आदि) के लिए सिस्टम-वाइड कॉन्फ़िगरेशन प्रदान करता है। सामान्य रूप से समकक्ष की कोई आवश्यकता नहीं है /etc/bash_profile, क्योंकि प्रोफ़ाइल फ़ाइल का उद्देश्य लॉगिन गोले के लिए व्यवहार को नियंत्रित करना है। आम तौर पर आप जो कुछ भी करना चाहते हैं वह बाश-विशिष्ट नहीं होने वाला है। /etc/bash.bashrcबैश-विशिष्ट है, और दोनों लॉगिन और गैर-लॉगिन शेल के लिए चलाया जाएगा।

चीजों को और जटिल करने के लिए, ऐसा लगता है कि ओएस एक्स में ए भी नहीं है /etc/bash.bashrc। यह संभवतः इस तथ्य से संबंधित है कि टर्मिनल X ओएस एक्स में डिफ़ॉल्ट रूप से लॉगिन गोले के रूप में चल रहा है , इसलिए भेद खो गया है:

टर्मिनल विंडो दिशानिर्देशों का एक अपवाद मैक ओएस एक्स है Terminal.app, जो .bashrc के बजाय .bash_profile को कॉल करके प्रत्येक नई टर्मिनल विंडो के लिए डिफ़ॉल्ट रूप से एक लॉगिन शेल चलाता है। अन्य जीयूआई टर्मिनल एमुलेटर भी ऐसा कर सकते हैं, लेकिन अधिकांश ऐसा नहीं करते हैं।

मैं OS X नहीं चलाता, इसलिए मेरे ज्ञान की सीमा वहीं समाप्त हो जाती है।


/etc/bash.bashrcगैर-संवादात्मक शेल से न पढ़ें । /etc/profileगैर-इंटरैक्टिव शेल द्वारा पढ़ा जा सकता है। लॉगिन शेल और गैर-लॉगिन शेल के बीच अंतर
गिल्स का SO-

@ गिल्स - मैं स्पष्ट नहीं कर रहा हूँ कि आप यहाँ क्या बनाने की कोशिश कर रहे हैं। एक गैर-संवादात्मक लॉगिन शेल वास्तव में एक असामान्य बात है। संदर्भ के लिए, मेरे द्वारा लिखा गया कोड मेरी अपनी रचना नहीं है। यह /etc/profileUbuntu 12.04 में डिफ़ॉल्ट से है । इसके बजाय आप क्या सुझाव देंगे अगर कोई चाहता /etc/profileथा जिसे केवल मार के तहत निष्पादित किया गया था, और कोई अन्य श-संगत शेल नहीं था?
ire_and_curses

/etc/profileमेरे सिस्टम की सिस्टम फ़ाइल में शीर्ष पर एक टिप्पणी है जिसमें लिखा है # System-wide .profile for sh(1):। इसका मतलब यह है profileहै shविशिष्ट? किसी shतरह पहले चलता है bash?

@ जोश वोइगेट्स - shका सबसेट है bash/etc/profileके लिए मार डाला जाता है sh, bashअन्य सभी बॉर्न-संगत के गोले, और।
ire_and_curses

@ire_and_curses ऐसा प्रतीत होता है कि फ़ाइल को /etc/bashrcमैक पर बुलाया गया है, नहीं /etc/bash.bashrc। यह भी के लिए चलाने के लिए प्रकट होता है /bin/sh
ब्रेनस्टॉर्म। INR

4

/etc/profileवैश्विक है bash_profile। बैश करने के लिए विशिष्ट कोई फ़ाइल नहीं है, बैश बस सभी बॉर्न-शैली शेल द्वारा पढ़ी गई मानक फ़ाइल पढ़ता है। यहीं से आप सिस्टम-वाइड वातावरण चर सेट कर सकते हैं।

देखें क्या सभी गोले द्वारा पढ़ी गई ".bashrc" समकक्ष फ़ाइल है? बैश की सामान्य स्टार्टअप फ़ाइलों के एक सामान्य अवलोकन के लिए।


0

सेटअप इंटरएक्टिव शेल (बैश) ग्लोबली

यह लोड नहीं करता है /etc/profile, इसलिए लोड होने में कुछ भी नहीं है /etc/profile.d/(लॉगिन शेल के विपरीत, अंत देखें)।

इसके लिए वैश्विक फ़ाइल / etc / bashrc या /etc/bash.bashrc ( -DSYS_BASHRC=संकलन समय पर ध्वज सेट के आधार पर ) है:

# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
   return
fi

PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize

[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"

आमतौर पर टकराव से बचने के लिए इस फ़ाइल को (जितना संभव हो) छोड़ना एक अच्छा विचार है। मेरे द्वारा उपयोग की जाने वाली रणनीति लॉगिन (/ आदि / प्रोफ़ाइल) के गोले के समान है।

मेरी रणनीति उपरोक्त फ़ाइल में एक लोडर संलग्न करना है:

# Add new directory analog to /etc/profile.d
mkdir /etc/bashrc.d

# Write the loader to /etc/bash.bashrc (it might be /etc/bashrc on as mentioned above)
cat >> /etc/bash.bashrc << 'EOF'
# I appended this: Load scripts from /etc/bashrc.d
if test -d /etc/bashrc.d; then
  for script in /etc/bashrc.d/*.sh; do
    test -r "$script" && . "$script"
  done
  unset item
fi
EOF

अब मैं आसानी से / .cc/bashrc.d निर्देशिका में नई .shfiles डालकर वैश्विक इंटरएक्टिव (bash) शेल फ़ाइल में n अनुकूलन कर सकता हूं।

ग्रेप ग्लिस ग्लोबलाइज़ करें

/etc/bashrc.d/grep.sh

alias grep='grep --color=auto'

आप इसे इस एक-लाइनर के साथ कर सकते हैं:

printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh

Profile.d vs bashrc.d की तुलना करें

यदि, इसे पढ़ने के बाद, आप बिना पढ़े रह जाते हैं, तो अपने आप को समझाने के लिए ऐसा करें:

printf "alias grep=\'grep --color=auto\'" > /etc/profile.d/grep.sh

एक नया टर्मिनल एमुलेटर खोलें और अपने उपयोगकर्ता निर्देशिका में कुछ सामान्य शब्द खोजें जैसे "grep का उपयोग करना"

grep -r 'the'

कुछ भी रंगीन नहीं होना चाहिए। वर्चुअल कंसोल में एक ही काम करें CTRLALTF1 (याद रखें कि आपका एक्स सर्वर शायद CTRLALTF7 पर चल रहा है ताकि आप वापस स्विच कर सकें। यदि आपका भूल जाते हैं, तो बस अपने डेस्कटॉप प्रबंधक को फिर से शुरू करें, उदाहरण के लिए)

grep -r 'the' 

वांछित के रूप में रंगीन परिणाम देगा।

कुछ भी रंगीन नहीं होना चाहिए। आभासी कंसोल में एक ही काम करें CTRLALTF1(याद रखें कि आपका एक्स सर्वर संभवतः चल रहा है CTRLALTF7ताकि आप वापस स्विच कर सकें। यदि आपका भूल जाते हैं, तो बस अपने डेस्कटॉप प्रबंधक को पुनरारंभ करें, उदाहरण के लिए)

grep -r 'the' 

वांछित के रूप में रंगीन परिणाम देगा।

एक लॉगिन खोल क्या आप जब आप एक मशीन बूट या साथ आभासी शान्ति स्विच मिलता है CTRLALTF1के माध्यम से FNthआभासी कंसोल।

फ़ाइलों को लोड /etc/profileकरते समय एक लॉगिन शैल लोड होता /etc/profile.d/*.shहै।

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