मैक ओएस एक्स योसेमाइट पर बैश कैसे अपडेट करें


25

बस थोड़ा पटकथा सीखने की कोशिश कर रहा है। मेरा पुराना बैश संस्करण:

Bash version 3.2.53(1)-release...

मैं होम ओएस के साथ मैक ओएस एक्स yosemite पर अपने बैश को अद्यतन किया है:

brew update
brew install bash

तब टर्मिनल गुणों में मैंने मानक शेल पथ को इससे बदल दिया /bin/bashहै /usr/local/bin/bash(जैसा कि मैं समझता हूं कि यह वह जगह है जहां होमब्रे अपडेट किए गए बैश स्थापित करता है)।

तब मैंने फिर से परिणाम की जाँच की (और ऐसा लगता है कि यह सब अच्छा है):

$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...

लेकिन जब मैं एक साधारण बैश स्क्रिप्ट लिखने की कोशिश कर रहा था:

#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "Welcome $i times"
 done

परिणाम है:

Bash version 3.2.53(1)-release...
Welcome {0..10..2} times

के बजाय:

Bash version 4.0.33(0)-release...
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times

जब मैं एक ही शेल में स्क्रिप्ट निष्पादित करने का प्रयास कर रहा हूं तो बैश संस्करण पुराने में क्यों बदल जाता है ??? यह बस मुझे बाहर निकालता है! कृपया किसी ने मुझे समझाया कि मेरी समस्या क्या है)))

जवाबों:


17

आपकी समस्या आपकी पहली पंक्ति में है। आपके पास यह है:

#!/bin/bash

जो स्पष्ट रूप से बताता है कि शेल स्क्रिप्ट को पुराने के साथ चलाया जाना चाहिए /bin/bash। आप वास्तव में क्या चाहते हैं, यह है:

#!/usr/local/bin/bash

नई उपयोग करने के लिए bashसे /usr/local/bin


अजीब बात है, लेकिन यह वास्तव में काम नहीं किया। अभी भी एक ही परिणाम ((लेकिन मुझे यकीन है कि यह एक समस्या का एक हिस्सा है
ड्रू

क्या मुझे इस रास्ते को कहीं और निर्दिष्ट करने की आवश्यकता है? कुछ शेल फ़ाइल में या कुछ और?
ड्रू

1
हो सकता है कि पर्यावरण को कॉलिंग शेल यानी पुराने बैश द्वारा सेट किया गया हो? आप वास्तव में अपनी स्क्रिप्ट को कैसे कॉल कर रहे हैं, @Andrew?
slhck

1
@ और, मुझे संदेह है कि आपका shअंदर है /binbrewशायद bashबुलाया के लिए एक सहानुभूति नहीं बनाई sh। अपने $PATHसेट के साथ सही ढंग से, इसे इस तरह शुरू करने का प्रयास करें bash script.sh:।
बेनजीवेबे

8
भविष्य के संदर्भ के लिए, आपको संभवतः उपयोग करना चाहिए#!/usr/bin/env bash
pjvandehaar

15

नया बैश स्थापित करें:

brew install bash

इसे डिफ़ॉल्ट शेल बनाएं:

chsh -s /usr/local/bin/bash

स्क्रिप्ट में पर्यावरण सेट करें:

#!/usr/bin/env bash

का उपयोग कर envअपने में बैश की तलाश करेंगे $PATHऔर पहले एक का उपयोग करें जो इसका सामना करता है। आप यह देख सकते हैं कि bashयह किस प्रकार का उपयोग करेगा which bash। यदि यह देखकर है /bin/bashपहले, आप अपने सेट करने की आवश्यकता होगी $PATHमें ~/.bashrcऔर /.bash_profile


2
यदि आप उपयोग करते समय "गैर-मानक शेल" प्रिंट करते हैं chsh, तो आपको अपडेट / आदि / गोले करने होंगे
स्कॉट विलेके

6

जैसा कि पीजेवी ने कहा है, आपको वास्तव में उपयोग करना चाहिए

#!/usr/bin/env bash

आपकी स्क्रिप्ट में हर जगह पोर्टेबल होना चाहिए। जैसे अगर आप अपनी स्क्रिप्ट को चलाने की कोशिश करते हैं

#!/usr/local/bin/bash

यह अधिकांश लिनक्स सिस्टम पर विफल हो जाएगा।

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