मेरे मैक पर .profile और .bashrc doesn`t काम करते हैं


29

यह समस्या मुझे लंबे समय से है। टर्मिनल चलाने के बाद .profile, और .bashrc फ़ाइल काम नहीं करती (निष्पादित नहीं होती)। क्या आप बता सकते हैं कि मुझे समस्या का स्रोत कहां दिखना चाहिए?


जांचें कि क्या इस फाइलों की उचित अनुमति है

हाँ ... आप सही हैं कारण वास्तव में बेवकूफ था - गलत अनुमतियाँ chmod + x ~ / .profile और सब कुछ अच्छी तरह से काम कर रहा है।

5
@xTrol: इसका कोई मतलब नहीं है, ~/.profileनिष्पादन की अनुमति की आवश्यकता नहीं है। (शेल स्रोत इसे कहते हैं, यह इसे निष्पादित नहीं करता है)। कोशिश करें chmod -x ~/.profileऔर देखें कि क्या यह अभी भी काम करता है।
कीथ थॉम्पसन

जवाबों:


40

मेरे .profileन चलने से भी मुझे ऐसी ही समस्या थी । यह पता चला है (जैसा कि इस Apple StackExchange उत्तर में बताया गया है ) यदि आपके पास .bash_profileया .bash_loginफाइलें हैं, तो आपके .profileद्वारा बैश को नजरअंदाज कर दिया जाएगा।


2
मेरा मुद्दा यह था कि मैंने पायथन स्थापित किया था जो स्वचालित रूप से एक .bash_profile फ़ाइल बनाता था जिसके कारण मेरा .profile नहीं चल पाता था।

5
यह उत्तर मेरी मदद करता है। .bash_loginमैं स्थापित करने के बाद जोड़ा गया था rvm

17

मुझे लगता है कि यह प्रश्नोत्तर सुपरसुसर में जाना चाहिए, लेकिन वैसे भी:

मैन पेज के सेक्शन के अनुसार ,

  • /etc/profileऔर ~/.profileएक इंटरेक्टिव लॉगिन शेल के लिए पढ़ा जाता है, और
  • ~/.bashrc एक इंटरैक्टिव गैर-लॉगिन शेल के लिए पढ़ा जाता है।

यदि आपकी अन्य UNIX मशीन ~/.bashrcएक इंटरेक्टिव लॉगिन शेल के लिए भी स्वचालित रूप से पढ़ती है , तो ऐसा इसलिए है क्योंकि सिस्टम-वाइड /etc/ profileमें एक पंक्ति है जो पढ़ता है ~/.bashrc। ओएस एक्स के सिस्टम-वाइड /etc/profileमें एक नहीं है।

इसलिए, यदि आप ~/.bashrcइंटरेक्टिव लॉगइन शेल के लिए भी दौड़ना चाहते हैं, तो आपको एक लाइन शामिल करनी होगी

. ~/.bashrc

अपने में ~/.profile


और यहां लापता टुकड़े को भरने के लिए: एक टर्मिनल शेल (जो ओपी का सवाल था) डिफ़ॉल्ट रूप से एक इंटरैक्टिव लॉगिन शेल है।
13

3

उन्हें "हाथ से" सोर्स करने की कोशिश करें:

source ~/.profile

और देखो क्या होता है। ध्यान दें कि, जैसा कि अन्य ने बताया है कि, .profile लॉगिन गोले द्वारा खट्टा है, .bashrc गैर-लॉगिन गोले द्वारा; इसलिए एक या दूसरे की कोशिश करो, दोनों नहीं।


2

अपनी प्राथमिक वरीयताओं में, 'स्टार्टअप' फलक में जाँच करें। आपके पास विकल्प हैं:

इसके साथ खुले गोले:

  • डिफ़ॉल्ट लॉगिन शेल (/ usr / बिन / लॉगिन)
  • कमान (पूरा रास्ता)

मेरे पास 'डिफ़ॉल्ट' चुना गया है ... यदि आपके पास कस्टम कमांड चुना गया है, तो यह एक कारक हो सकता है।

जांच करने के लिए अगला बिंदु यह है कि क्या शेल एक लॉगिन शेल के रूप में शुरू किया गया है। जब मैं एक psसूची बनाता हूं, तो मैं देखता हूं:

  PID TTY           TIME CMD
24088 ttys000    0:00.03 -sh
24614 ttys001    0:00.03 -sh
25127 ttys002    0:00.05 -sh
35544 ttys003    0:00.08 -sh
40926 ttys004    0:00.03 -sh

यहाँ मुख्य बिंदु -शेल नाम के सामने ' ' है; प्रोफ़ाइल और संबंधित सामग्री के माध्यम से चलाने के लिए शेल को बताता है। यदि आप अपनी वर्तमान विंडो में नहीं देखते हैं, तो आपको सेटिंग के साथ तब तक की आवश्यकता हो सकती है जब तक आप ऐसा नहीं करते हैं।

टर्मिनल प्राथमिकताओं में सेटिंग्स फलक भी एक शेल विकल्प को सूचीबद्ध करता है। मैं / बिन / श मेरा में सूचीबद्ध है।


आपको इसकी आवश्यकता नहीं होनी चाहिए

यदि सबसे बुरा सबसे खराब आता है, तो आप ऐसा कर सकते हैं जैसा कि मैंने पिछले कुछ समय में कुछ अन्य असहयोगात्मक प्रणालियों पर किया था - मैंने एक प्रोग्राम 'लॉगइनश' बनाया, जिसे मैं खिड़कियों से चला सकता हूं, और यह बदले में मेरे चुने हुए शेल को ' -' के साथ निष्पादित करेगा । उपसर्ग यह एक लॉगिन शेल के रूप में काम करने के लिए बताने के लिए।

#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "stderr.h"
#include "jlss.h"

#ifndef DEFAULT_SHELL
#define DEFAULT_SHELL   "/bin/sh"
#endif /* DEFAULT_SHELL */

#ifndef MAX_SHELLBASENAME
#define MAX_SHELLBASENAME   256
#endif /* MAX_SHELLBASENAME */

#ifndef lint
static const char sccs[] = "@(#)$Id: loginsh.c,v 4.2 2005/06/22 19:44:07 jleffler Exp $";
#endif

int main(int argc, char **argv)
{
    char     *shell;
    char      shellname[MAX_SHELLBASENAME];

    err_setarg0(argv[0]);

    /* Which shell to use? */
    if ((shell = getenv("SHELL")) == (char *)0)
        shell = DEFAULT_SHELL;

    /* Set up argv[0] in new argument list; reuse old argv space */
    shellname[0] = '-';
    strcpy(&shellname[1], jlss_basename(shell));
    argv[0] = shellname;

    /* Execv must work -- the shell must be an executable program */
    execv(shell, &argv[0]);
    err_syserr("cannot execute shell %s\n", shell);

    /* NOTREACHED */
    return(EXIT_FAILURE);
}

( "stderr.h"हेडर और ' err_*' रूटीन एक त्रुटि रिपोर्टिंग पैकेज है जिसका उपयोग मैं हर जगह करता हूं। jlss_basename()फ़ंक्शन मूल रूप से सिस्टम प्रदान किए गए संस्करण जैसे कि POSIX में पाए जाते हैं <libgen.h>। '


2

उपरोक्त अच्छी जानकारी, लेकिन मैंने सोचा था कि मेरे पास जो समस्या थी और जो समाधान मुझे मिला, उस पर कुछ विवरण साझा करूंगा।

जरूरत: OSX 10.8 (एमएल) पर पेटीएम के लिए एक निर्देशिका जोड़ें।

समस्या यह है: मार्गदर्शन अक्सर "अपने घर निर्देशिका में .profile mod" है। डिफ़ॉल्ट रूप से, यह फ़ाइल OSX पर मौजूद नहीं है। निस्संदेह भ्रमित है क्योंकि एक बार जब आप मौजूदा निर्देशिका में नई निर्देशिका को जोड़ने के लिए एक निर्यात विवरण जोड़ते हैं ... तो यह काम नहीं करता है। ऊपर से ढंका हुआ।

समाधान: मैंने अपने .bash_profile (होम निर्देशिका में भी) में निर्यात विवरण जोड़ा।

मुझे यकीन है कि इस बिल्ली की त्वचा के कई तरीके हैं। यह एक मेरे लिए काम किया। कुछ हद तक आत्मविश्वास प्रेरक: .bash_profile पहले से ही मौजूद था और मैं देख सकता था कि अन्य स्थापित सॉफ्टवेयर (जैसे रूबी) ने इसे संशोधित किया था। अगर कोई बेहतर उपाय है तो मुझे इसके बारे में सुनकर खुशी होगी!

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