OSX पर संस्करण 4.0 में बैश अपडेट करें


80

क्या वास्तव में OSX Yosemite में संस्करण 4.0 में bash अपडेट करना संभव है?

echo $BASH_VERSION
3.2.57(1)-release

यह आलेख और यह थ्रेड एक ही प्रश्न को संदर्भित करता है, लेकिन वे पुराने के साथ एक नया शेल साइड-बाय-साइड स्थापित करते हैं। क्या पुराने बैश शेल को सीधे अपडेट करने का कोई तरीका है?


3
ऐसा करने की कोई जरूरत नहीं है। वास्तव में, मूल को हमेशा रखना एक अच्छा विचार है। बैश के दो या दो से अधिक संस्करण एक ही समय में स्थापित किए जा सकते हैं, और आप जो भी तय करना चाहते हैं उसे डिफ़ॉल्ट रूप से सेट कर सकते हैं
lupincho

अनिवार्य रूप से Apple का सॉफ़्टवेयर अपडेट सिस्टम पर BASH के संस्करण को बदलने के लिए ज़िम्मेदार होगा, जैसे उसने शेलशॉक के लिए BASH के अपडेट के साथ किया था। इसलिए जब तक Apple अपडेट प्रदान नहीं करता है, तब तक GNU BASH के नवीनतम संस्करण में अपडेट करने का कोई सीधा तरीका नहीं है जो OS X के हिस्से के रूप में स्थापित है। एक अप्रत्यक्ष तरीका यह होगा कि आप इसे स्वयं डाउनलोड करें, एक या दूसरे माध्यम से, और इसे इंस्टाल करें और फिर इसे अपने डिफ़ॉल्ट शेल के रूप में सेट करें। चाहे आप शिप किए गए संस्करण या Apple अपडेटेड संस्करण को निकालना चाहते हैं या नहीं, यह आपके ऊपर है।
user3439894

जवाबों:


36

Apple Bash को अपडेट नहीं करेगा, क्योंकि नवीनतम संस्करण GPLv3 के तहत लाइसेंस प्राप्त है, जिसे Apple उपयोग नहीं कर सकता है। उन्होंने हालांकि अपने अधिकांश अन्य गोले अपडेट किए हैं। उदाहरण के लिए ZSH ज्यादातर अद्यतित है।

संदर्भ:

थोड़ा शोध के बाद, यह प्राथमिक मुद्दे की तरह लगता है:

जब लोग GPLv3 के तहत सॉफ़्टवेयर शामिल करने वाले उपयोगकर्ता उत्पाद वितरित करते हैं, तो अनुभाग 6 के लिए आवश्यक है कि वे आपको उस सॉफ़्टवेयर को संशोधित करने के लिए आवश्यक जानकारी प्रदान करें। उपयोगकर्ता उत्पाद लाइसेंस में विशेष रूप से परिभाषित एक शब्द है; उपयोगकर्ता उत्पादों के उदाहरणों में पोर्टेबल म्यूजिक प्लेयर, डिजिटल वीडियो रिकॉर्डर और होम सिक्योरिटी सिस्टम शामिल हैं।

इसके लिए आवश्यक है कि अन्यथा बंद-स्रोत सॉफ़्टवेयर, उसके GPL'd भाग को जनता द्वारा संशोधित किया जाए, जो स्पष्ट रूप से Apple के लिए एक मुद्दा होगा।


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
bmike

5
इस व्याख्या का कोई मतलब नहीं है। जीपीएल (v3 या अन्यथा) को बाइनरी करने का मतलब यह नहीं है कि बाकी ओएस को जारी करने की आवश्यकता होगी। बाकी OS से लिंक नहीं होता है bash। "Tivoization" क्लॉज़ समझा सकता है कि bashApple TV पर अपडेट क्यों नहीं किया जा सकता है, कहते हैं, लेकिन वास्तव में डेस्कटॉप मैक पर नहीं। इसके अलावा, "GPL'd अंश" को पहले से ही जनता द्वारा संशोधित किए जाने की आवश्यकता होगी; v3 वह नहीं बदलेगा। मुझे विश्वास है कि GPL v3 के पेटेंट क्लॉज Apple को GPL v3 कोड को छूने से रोकने के लिए पर्याप्त होगा।
jamesdlin

Apple के लिए यह एक मुद्दा क्यों होगा? बैश पहले से ही खुला स्रोत (सभी संस्करणों ≥1.14 जीएनयू @ के माध्यम से उपलब्ध हैं ftp.gnu.org/gnu/bash और संस्करण MacOS (वर्तमान में v3.2 के साथ शामिल) एप्पल के माध्यम से उपलब्ध है @ opensource.apple.com/source/bash ), लेकिन इसे संशोधित किया जा सकता है।
आवाजें

@ tjt263 यह GPLv3 और GPLv2 के बीच के अंतरों के बारे में है, जो कि संस्करण Apple उपयोग करता है, अभी भी इसके अंतर्गत लाइसेंस प्राप्त है।
विलियम टी फ्रॉगार्ड

3
सही, Bash3.2 को GPLv2 के तहत लाइसेंस प्राप्त है। Bash4.x को GPLv3 के तहत लाइसेंस प्राप्त है। तो क्या? आपने कहा: "Apple Bash को अपडेट नहीं करेगा, क्योंकि नवीनतम संस्करण GPLv3 के तहत लाइसेंस प्राप्त है, जिसे Apple उपयोग नहीं कर सकता है ।" वे क्यों नहीं कर सकते? "इसके लिए आवश्यक है कि अन्यथा बंद-स्रोत सॉफ़्टवेयर, इसके GPL'd भाग को जनता द्वारा संशोधित किया जाए , जो स्पष्ट रूप से Apple के लिए एक समस्या होगी ।" वह मुद्दा क्यों है? वे पहले से ही ऐसा करते हैं। यह पहले से ही जनता द्वारा संशोधित है। सभी सॉफ्टवेयर है। खासकर जब यह FOSS है और वे अपनी साइट पर स्रोत कोड को किसी ऐसे व्यक्ति को दे रहे हैं जो इसे चाहता है।
आवाजें

62

क्या वास्तव में OSX Yosemite में संस्करण 4.0 में bash अपडेट करना संभव है? हाँ।

  1. टर्मिनल में इस कमांड को चलाकर होमब्रेव http://brew.sh/ डाउनलोड करें ।

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. अपने टर्मिनल से बाहर निकलें और फिर से खोलें। फिर टाइप करें

    brew install bash
  3. अपने नए बैश के शाब्दिक पथ के साथ टर्मिनल गुई के माध्यम से डिफ़ॉल्ट शेल को बदलें (EDIT: मुझे अभी तक सीएलआई तरीका है कि काम करता है)

यहाँ छवि विवरण दर्ज करें

क्या वास्तव में Apple के प्रदान किए गए bash संस्करण 4.0 को OSX Yosemite में अपडेट करना संभव है ?

संपादित करें: नहीं, जिस तरह से ऑप पूछ रहा है। उदाहरण के लिए अपने आप को बदलने के माध्यम से वर्तमान स्थापित उन्नयन। अन्य उत्तरों में यह नोट किया गया है कि लाइसेंस के मुद्दों के कारण Apple ने बैश को अपडेट नहीं किया है। हालाँकि, बैश के एक अद्यतन और अलग संस्करण को डाउनलोड करना और इसे अपने डिफ़ॉल्ट शेल के रूप में उपयोग करना, अधिकांश दुभाषियों के लिए विहित समाधान है। उदाहरण के लिए अजगर को लें। आप 2.7 से 3.5 को अपग्रेड नहीं करते हैं आप एक अलग संस्करण डाउनलोड करते हैं और अपना डिफ़ॉल्ट बदलते हैं।


12
आप डिफ़ॉल्ट को CLI के माध्यम से सेट कर सकते हैं sudo chpass -s /usr/local/bin/bash:। नोट: /usr/local/bin/हर बार अपने पर्यावरण को बदलने के बिना ब्रू को इस तरह से सिमिलर को इंगित करना सबसे अच्छा है ।
संस्पून

3
गैर-Apple शेल के साथ जाने के जोखिम क्या हैं?
Bjorks नंबर एक प्रशंसक

5
sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'फिर chsh -s /usr/local/bin/bashटर्मिनल के लिए डिफ़ॉल्ट शेल सेट करेगा
अभिजीत सरकार

51

जैसा कि @William ने अपने जवाब में कहा, Apple GPL प्रतिबंधों के कारण बैश 4 प्रदान नहीं करता है। फिर भी आप 4+ को इंस्टॉल कर सकते हैं और निम्न करके भी इसे अपना डिफ़ॉल्ट शेल (टर्मिनल और iTerm2 के लिए ) बना सकते हैं ।

होमब्रे के माध्यम से बैश 4 स्थापित करें

पहले बैश के नए संस्करण को स्थापित करें। ऐसा करने के विभिन्न तरीके हैं, मुझे Homebrew पसंद है।

  • होमब्रे को http://brew.sh पर वर्णित के रूप में स्थापित करें ।
  • का उपयोग करके बैश स्थापित करें brew install bash

बैश 4 अब आपके PATH (होमब्राउ बिन आपके मार्ग पर है) पर उपलब्ध है। हालांकि, यह है नहीं अभी तक अपने डिफ़ॉल्ट खोल। आप पा सकते हैं कि यह कहां पर स्थित है which bash। मेरे मामले में यह है /usr/local/bin/bash

बाश 4 का उपयोग करना

चूँकि यह आपके PATH पर है, आप बस 4 सेशन के साथ बैश शुरू कर सकते हैं bashया इसे शेबंग का उपयोग करके स्क्रिप्ट में इस्तेमाल किया जा सकता है ।

उदाहरण के लिए, यह एक विशिष्ट बैश उदाहरण का उपयोग करेगा।

#!/usr/local/bin/bash
...your script...

यह PATH पर पहले बैश का उपयोग करेगा।

#!/usr/bin/env bash
...your script...

आप @ user136952 के उत्तर में वर्णित चरणों का उपयोग करके टर्मिनल / iTerm2 में विशिष्ट प्रोफाइल के लिए बैश पाथ भी सेट कर सकते हैं।

बैश 4 को डिफ़ॉल्ट बनाना

जैसा कि ऊपर उल्लेख किया गया है, बैश 4 को स्थापित करने के बाद भी डिफ़ॉल्ट शेल नहीं है। डिफ़ॉल्ट रूप से बैश करने के लिए आपको दो और चरण करने होंगे।

सबसे पहले, अपनी /etc/shellsफ़ाइल में बैश 4 पथ जोड़ें, ताकि यह एक स्वीकृत लॉगिन शेल हो। जैसा कि / etc / गोले में वर्णित है , इस फ़ाइल में मान्य लॉगिन गोले की सूची है। नए बाश पथ को जोड़ने के बाद मेरा /etc/shellsलुक निम्नलिखित है:

# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/bash

आगे हम chsh का उपयोग करते हुए इसे आपका डिफ़ॉल्ट शेल बनाते हैं। तो उस उपयोगकर्ता के लिए कोई भी सत्र उस शेल का उपयोग करेगा। मैक ओएस एक्स टर्मिनल में शेल द चेंज में आप इसके बारे में अधिक पढ़ सकते हैं , लेकिन वास्तविक कमांड बहुत सीधा है।

chsh -s /usr/local/bin/bash

अब नया बैश हमारा डिफ़ॉल्ट लॉगिन शेल है। यदि आप टर्मिनल या iTerm2 खोलते हैं और चलाते हैं bash --versionतो आपको नया संस्करण देखना चाहिए। "लाइसेंस GPLv3 +" पर ध्यान दें, यही कारण है कि Apple इसे macOS के साथ बंडल नहीं करता है।

$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.6.0)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

2
लेख / सूत्र के आधार पर वह मुझे लगता है कि वह वास्तव में "डिफ़ॉल्ट रूप से नहीं" साइड-बाय-साइड कहकर जुड़ा था। मेरा उत्तर 4 को डिफ़ॉल्ट बनाता है इसलिए 3 अब दिखाई नहीं देता है। तथ्य यह है कि पुराने बैश अभी भी कुछ डिस्क स्थान लेने के लिए होता है मेरे लिए एक बड़ा मुद्दा नहीं लगता है।
स्टूजेक

1
मेरे द्वारा +1। हां, ओपी ऐसा नहीं चाहता है, लेकिन सवाल समुदाय का है और अगर इससे अन्य लोगों को मदद मिलती है, तो बहुत बढ़िया। हो सकता है कि ओपी के चयन के रूप में यह जांच न हो, लेकिन यह इसका बुरा जवाब नहीं है।
bmike

3
हाई सिएरा पर, केवलsudo chpass -s /usr/local/bin/bash रूट / सुडो के लिए मेरा शेल बदलता है मेरे नियमित लॉगिन के लिए बदलने के लिए, मुझे इसके बिना कमांड चलाना होगा sudo। यह एक सक्रिय निर्देशिका बात हो सकती है; मुझे यकीन नहीं है।
ब्रैड सजोनी

1
#!/usr/local/bin/bashशेबंग का उपयोग करने के बजाय , उपयोग #!/usr/bin/env bash( स्पष्टीकरण ) में देखें। यह स्क्रिप्ट को चलाएगा, जो भी स्क्रिप्ट को लॉन्च कर रहा है, जो कि पर्यावरण द्वारा पहुंच योग्य है, यानी जो भी which bashरिटर्न देता है। यह अधिक पोर्टेबल समाधान है जो विशिष्ट रास्तों का उपयोग करता है। हम अन्य उपयोगकर्ताओं को होमब्रे के माध्यम से बैश स्थापित करने की उम्मीद नहीं कर सकते हैं।
इलिया मोस्कविन

1
@IllyaMoskvin, मैंने मूल रूप से एक विशिष्ट पथ का उपयोग किया था क्योंकि मैं यह दिखाना चाहता था कि इसे स्पष्ट रूप से कैसे उपयोग किया जाए। मैंने दोनों के उदाहरणों को अपडेट किया है।
स्टूजेक

0

आप होमब्रेक के बिना बैश का एक और संस्करण स्थापित कर सकते हैं

  • जीएनयू बैश में जाएं
  • इच्छित संस्करण डाउनलोड करें ( यहां )
  • और यहां दिए गए चरणों का पालन करें: https://gist.github.com/samnang/1759336

    उस संस्करण को डाउनलोड और इंस्टॉल करें जिसे आप चाहते हैं XX (bash-XX में) बदलें संस्करण को आप चाहते हैं जैसे कि 4.4

    curl -O http://ftp.gnu.org/gnu/bash/bash-X.X.tar.gz
    tar xzf bash-X.X.tar.gz
    cd bash-X.X
    ./configure --prefix=/usr/local && make && sudo make install
    

    नए शेल को कानूनी गोले की सूची में जोड़ें

    sudo bash -c "echo /usr/local/bin/bash >> /private/etc/shells"

    उपयोगकर्ता के लिए शेल बदलें

    chsh -s /usr/local/bin/bash

    बैश 4 और / usr / स्थानीय / बिन / बैश के लिए जांचें ...

    echo $BASH && echo $BASH_VERSION

    यदि आप चाहते हैं कि आप इसका उपयोग करने के लिए बैश कमांड चाहते हैं, तो आप एक उपनाम जोड़ना चाहते हैं। अपने ~ / .bash_profile में रखें

    alias bash="/usr/local/bin/bash"

-1

साइड-बाय-साइड आपके शेल में अपडेट के साथ इंस्टॉल (chsh या GUI के माध्यम से) स्क्रिप्ट के लिए विफल हो जाएगा। लिपियों में अक्सर उपयोग होता है env bash, जो ओएस एक्स बैश संस्करण में बदल जाता है। तो, आप जो चाहते हैं, वह पूरी तरह से बैश का अद्यतन नहीं हो सकता है, लेकिन एक साइड-बाय-साइड इंस्टॉल जो हमेशा बैश का नया संस्करण लौटाता है (यानी जब envभी लागू होता है)।

तो, इसे संभालने के लिए:

1) होमब्रे के माध्यम से बैश स्थापित करें, जैसा कि अन्य टिप्पणीकारों ने पोस्ट किया है

2) इस नए संस्करण (GUI या chsh कमांड के माध्यम से अपना लॉगिन शेल सेट करें जैसा कि अन्य ने पोस्ट किया है)

3) सेट /usr/local/bin(या नए bash संस्करण के लिए पथ) /binआपके $ PATH वैरिएबल के आगे , इसे आपके द्वारा जोड़कर ~/.bash_profile:export PATH=/usr/local/bin:$PATH


यह उन स्क्रिप्ट्स को तोड़ देगा जो बैश संस्करण 3 की उम्मीद करती हैं - यानी Apple ने स्क्रिप्ट की आपूर्ति की - आपको साइड से उपयोग करने की आवश्यकता है
user151019

एक उचित बिंदु। पिछले कुछ समय से इस तरह से चल रहा है और कोई समस्या नहीं है। हो सकता है कि Apple अपनी स्क्रिप्ट्स में पूरा रास्ता प्रदान करता है या यह सिर्फ एक रोड़ा नहीं मारा है। ऐप्पल सिस्टम लेवल स्क्रिप्ट के लिए, अर्थात शेल से नहीं, यह .bash_profileवैसे भी कभी भी कॉल नहीं करता है, इसलिए यह केवल कुछ भी प्रभावित करेगा जो आप किसी टर्मिनल में सीधे चलाते हैं।
cwingrav

2
@ मर्क मैं एक ऐसे उदाहरण के बारे में नहीं सोच सकता जहां v x4.x v .3.x के लिए लिखी गई स्क्रिप्ट को तोड़ देगा। क्या आप?
आवाजें

-1

2019: इस पोस्ट में जितना सरल है

$ brew install bash
$ sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
$ chsh -s /usr/local/bin/bash

फिर एक नया टर्मिनल टैब, आनंद लें!


1
बिना किसी स्पष्टीकरण के मेरे उत्तर को किसने नीचे दिया?
फुआडा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.