Bash’ı OSX’te 4.0 sürümüne güncelleyin


80

OSX Yosemite'deki bash sürümünü 4.0 sürümüne güncellemek mümkün mü?

echo $BASH_VERSION
3.2.57(1)-release

Bu makale ve bu konu aynı soruya atıfta bulunur, ancak eskisi ile yan yana yeni bir kabuk takarlar. Eski bash kabuğunu doğrudan güncellemenin bir yolu var mı?


3
Bunu yapmana gerek yok. Aslında, orijinalini saklamak her zaman iyi bir fikirdir. İki veya daha fazla bash sürümü aynı anda yüklenebilir ve hangisini varsayılan olmasını istediğinizi ayarlayabilirsiniz
lupincho

Esasen, Apple'ın Yazılım Güncellemesi, sistemdeki BASH sürümünü değiştirmekten sorumlu olacak, tıpkı Shellshock için BASH güncellemesinde olduğu gibi. Öyleyse Apple bir güncelleme sağlamazsa, OS X'in bir parçası olarak yüklenen en yeni GNU BASH sürümüne güncelleme yapmanın doğrudan bir yolu yoktur. Dolaylı bir yol, onu kendiniz, bir şekilde veya başka bir şekilde indirmek ve kurmak olacaktır. sonra varsayılan kabuğunuz olarak ayarlayın. Gönderilen sürümü veya Apple'ın güncellenmiş sürümünü kaldırmayı seçip seçmemek size kalmış.
user3439894

Yanıtlar:


36

Apple, en son sürüm, Apple'ın kullanamadığı GPLv3 kapsamında lisanslandığı için Bash'i güncellemeyecektir. Yine de diğer kabuklarının çoğunu güncellediler. Örneğin ZSH çoğunlukla güncel.

Referanslar:

Biraz araştırma yaptıktan sonra, bu temel sorun gibi görünüyor:

İnsanlar GPLv3 altında yazılım içeren Kullanıcı Ürünlerini dağıttıkları zaman, bölüm 6, bu yazılımı değiştirmek için gerekli bilgileri size vermelerini gerektirir. Kullanıcı Ürünleri, lisansta özel olarak tanımlanmış bir terimdir; Kullanıcı Ürünlerinin örnekleri arasında taşınabilir müzik çalarlar, dijital video kayıt cihazları ve ev güvenlik sistemleri bulunur.

Bu, aksi halde kapalı kaynak kodlu bir yazılımın GPL’sinin bölümlerinin halk tarafından değiştirilebilir hale getirilmesini gerektirir; bu da açıkça Apple için bir sorun olacaktır.


Yorumlar genişletilmiş tartışmalar için değildir; bu konuşma sohbete taşındı .
bmike

5
Bu açıklama bir anlam ifade etmiyor. Bir GPL (v3 veya başka şekilde) bir ikili veri gönderimi, işletim sisteminin geri kalanının serbest bırakılması gerektiği anlamına gelmez. İşletim sisteminin geri kalanı ile bağlantı kurmuyor bash. "Tivoization" maddesi, neden bashbir Apple TV'de güncellenemediğini, ancak gerçekten de bir masaüstü Mac'te bulunamadığını açıklayabilir . Ayrıca, "GPL'd bölümleri" zaten halk tarafından değiştirilebilir hale getirilmelidir; v3 bunu değiştirmez. Ben inansın bu patentler GPL v3 fıkra GPL v3 kod dokunmadan gelen Apple caydırmak için yeterli olacaktır.
jamesdlin

Bu neden Apple için bir sorun? Bash zaten açık kaynak kodludur (tüm sürümler .11.14 GNU @ ftp.gnu.org/gnu/bash adresinden temin edilebilir) ve macOS ile gelen sürüm (şu anda v3.2) Apple @ opensource.apple.com/source/bash adresinden edinilebilir ), ancak ne olursa olsun değiştirilebilir.
sesler

@ tjt263 Bu, Apple sürümünün hala lisansını elinde bulundurduğu GPLv3 ve GPLv2 arasındaki farklarla ilgilidir.
William T Froggard

3
Doğru, Bash3.2 GPLv2 altında lisanslanmıştır. Bash4.x GPLv3 altında lisanslanmıştır. Ne olmuş yani? Dedin ki: "Apple, Bash'i güncellemeyecektir, çünkü en son sürüm, Apple'ın kullanamadığı GPLv3 kapsamında lisanslanmıştır ." Neden yapamıyorlar? "Bu, aksi halde kapalı kaynaklı yazılımların GPL’sinin bölümlerinin halk tarafından değiştirilebilir hale getirilmesini gerektiriyor, ki bu da açıkça Apple için bir sorun olacak ." Bu neden bir sorun? Bunu zaten yaptılar. Zaten halk tarafından değiştirilebilir. Tüm yazılımlar Özellikle de FOSS olduğunda ve sitelerinde kaynak kodunu isteyen herkese verdiklerinde.
sesler

62

OSX Yosemite'deki bash sürümünü 4.0 sürümüne güncellemek mümkün mü? Evet.

  1. Terminalde bu komutu çalıştırarak homebrew http://brew.sh/ dosyasını indirin / yükleyin .

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. Çık ve terminalini tekrar aç. sonra yazın

    brew install bash
  3. Gui terminali üzerinden varsayılan kabuğu değiştirerek yeni bashınızın gerçek yolu ile (EDIT: İşe yarayan bir CLI yolu bulamadım)

görüntü tanımını buraya girin

Bash'ı, Apple'ın OSX Yosemite'deki sağlanan bash 4.0 sürümüyle güncellemek mümkün mü ?

EDIT: Hayır. Operasyonun sorduğu şekilde değil. Örneğin, mevcut yüklemeyi kendisini değiştirerek yükseltin. Diğer cevaplarda Apple’ın lisans sorunları nedeniyle bash’ı güncellemediği de belirtildi. Ancak, bash'ın güncellenmiş ve ayrı bir sürümünü indirmek ve bunu varsayılan kabuğunuz olarak kullanmak, çoğu tercüman için kanonik bir çözümdür. Örneğin python al. 2,7’yi 3,5’e yükseltmezsiniz, ayrı bir sürüm indirirsiniz ve varsayılanı değiştirirsiniz.


12
Sen ile CLI üzerinden varsayılan ayarlayabilirsiniz: sudo chpass -s /usr/local/bin/bash. Not: Sembolik bağlantıya, /usr/local/bin/Brew her zaman ortamınızı değiştirmek zorunda kalmadan yükseltmelerin üstesinden gelebilecek şekilde işaret etmek en iyisidir .
sansSpoon

3
Elma olmayan bir kabukla gitme riskleri nelerdir?
Bjorks bir numaralı hayranı

5
sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'daha sonra chsh -s /usr/local/bin/bashterminal için varsayılan kabuğu ayarlayacaktır
Abhijit Sarkar

51

@William'ın cevabında söylediği gibi, GPL kısıtlamaları nedeniyle Apple 4. bash sağlamamaktadır. Ancak bash 4+ ürününü yükleyebilir ve ayrıca aşağıdakileri yaparak varsayılan kabuğunuzu (Terminal ve iTerm2 dahil ) yapabilirsiniz.

Homebrew üzerinden Bash 4'ü yükleyin

Önce bash'ın yeni versiyonunu kurun. Bunu yapmanın çeşitli yolları var, Homebrew'i tercih ederim.

Bash 4 artık PATH'nizde kullanılabilir (Homebrew selesinin yolda olduğunu varsayarak). Ancak, öyle değil henüz varsayılan kabuk. Nerede bulunduğunu çalıştırarak bulabilirsiniz which bash. Benim durumumda öyle /usr/local/bin/bash.

Bash 4'ü kullanma

PATH'nizdebash olduğu için, yalnızca bir Bash 4 oturumu başlatabilir veya bir Shebang kullanarak komut dosyalarında kullanılabilir .

Örneğin, bu belirli bir bash örneği kullanacaktır.

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

Bu PATH üzerindeki ilk bash'ı kullanacaktır.

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

@ User136952'in yanıtında açıklanan adımları kullanarak Terminal / iTerm2'deki belirli profiller için bash yolunu da ayarlayabilirsiniz.

Bash 4'ü varsayılan yapmak

Yukarıda da belirtildiği gibi, Bash 4 kurulduktan sonra hala varsayılan kabuk değildir. Bash'ı varsayılan yapmak için iki adım daha yapmanız gerekir.

Öncelikle, Bash 4 yolunu /etc/shellsdosyanızı izin verilen bir giriş kabuğu olacak şekilde ekleyin . / Etc / shells'de açıklandığı gibi , bu dosya geçerli oturum açma kabukları listesine sahiptir. Yeni bash yolunu ekledikten sonra /etc/shellsaşağıdaki gibi görünüyorum:

# 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

Sonra onu varsayılan kabuğunuz yapmak için chsh kullanın. Yani o kullanıcı için herhangi bir oturum bu kabuğu kullanacaktır. Bununla ilgili daha fazla bilgiyi Mac OS X Terminalinde Kabuğu Değiştirme bölümünde bulabilirsiniz , ancak gerçek komut çok basittir.

chsh -s /usr/local/bin/bash

Şimdi yeni bash bizim varsayılan giriş kabuğumuz. Terminal veya iTerm2'yi açıp çalıştırıyorsanız bash --version, yeni sürümü görmelisiniz. "License GPLv3 +" sürümüne dikkat edin, bu nedenle Apple'ın macOS ile paketlememesi gerekir.

$ 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
Bağlantılı yazı / konuya dayanarak yan yana olmadığını söyleyerek gerçekten "varsayılan değil" anlamına geldiğini düşünüyorum. Cevabım 4'ü varsayılan yapar, 3 artık görünmez. Eski bash'ın hala biraz disk alanı kaplıyor olması, benim için büyük bir sorun gibi görünmüyor.
studgeek

1
Benim tarafımdan +1. Evet, OP bunu istemiyor, ancak soru topluluğa ait ve eğer bu diğer insanlara yardım ederse harika. OP'nin seçtiği cevap olarak onay alamayabilir, ancak bu kötü bir cevap değildir.
bmike

3
Yüksek Sierra'da, sudo chpass -s /usr/local/bin/bashkabuğumu sadece root / sudo için değiştiriyor. Düzenli giriş bilgilerimi değiştirmek için komutu olmadan çalıştırmam gerekiyor sudo. Bu bir Active Directory olayı olabilir; Emin değilim.
Bradd Szonye

1
#!/usr/local/bin/bashShebang'ı kullanmak yerine kullanmaya dikkat edin #!/usr/bin/env bash( açıklama ). Bu, senaryoyu hangi bash sürümünün, betiği başlatan ortamın erişebildiği, yani neyin which bashgeri döndüğünü gösterir. Belirli yolları kullanan daha taşınabilir bir çözümdür. Diğer kullanıcıların bash'ı homebrew aracılığıyla yüklemelerini bekleyemeyiz.
Illya Moskvin

1
@IllyaMoskvin, başlangıçta belirli bir yol kullandım çünkü açıkça nasıl kullanılacağını göstermek istedim. Her ikisine de sahip olacak örnekleri güncelledim.
studgeek

0

Bash'in başka bir versiyonunu homebrew olmadan kurabilirsiniz.

  • GNU Bash'e git
  • İstediğiniz sürümü indirin ( burada )
  • Ve buradaki adımları izleyin: https://gist.github.com/samnang/1759336

    İstediğiniz bash sürümünü indirin ve yükleyin XX (bash-XX içinde) istediğiniz sürümle değiştirin, örneğin 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

    Yeni kabuğu, okunaklı mermiler listesine ekle

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

    Kullanıcının kabuğunu değiştirin

    chsh -s /usr/local/bin/bash

    Bash 4 ve / usr / local / bin / bash için kontrol edin ...

    echo $BASH && echo $BASH_VERSION

    Bash komutunun kullanmasını istiyorsanız takma ad eklemek isteyebilirsiniz. ~ / .Bash_profile dosyanızı yerleştirin

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

-1

Yan yana yükleme, kabuğunuzda bir güncelleme ile (chsh veya GUI aracılığıyla) komut dosyaları için başarısız olur. Betikler sıklıkla env bashOS X bash sürümüne geri dönen kullanırlar. Dolayısıyla, istediğiniz şey bash'ın tam güncellemesi olmayabilir, ancak her zaman bash'ın daha yeni sürümünü döndüren yan yana bir kurulum olabilir (yani envçağrıldığında bile ).

Yani, bununla başa çıkmak için:

1) diğer yorumcuların yayınladığı gibi, Homebrew üzerinden bash yükleyin

2) giriş kabuğunuzu bu yeni sürüme ayarlayın (diğerlerinin gönderdiği gibi GUI veya chsh komutu aracılığıyla)

3) $ PATH değişkeninizin /usr/local/binönüne, /binbunu aşağıdakilere ekleyerek (veya yeni bash sürümünün yolunu ) ayarlayın ~/.bash_profile:export PATH=/usr/local/bin:$PATH


Bu, bash 3 sürümünü bekleyen komut dosyalarını kıracak - yani Apple tarafından sağlanan komut dosyaları
sde'yi

Adil bir nokta. Bir süredir böyle çalışıyor ve hiçbir sorun yok. Belki Apple tam yolunu komut dosyalarında sağlar veya bir engelleme yapmaz. Apple sistem seviyesi scriptleri için, yani bir kabuktan değil, hiçbir zaman .bash_profileyine de çağrılamaz, bu yüzden sadece bir terminalde doğrudan çalıştırdığınız bir şeyi etkiler.
cwingrav

2
@Mark v ≥4.x'ün v ≤3.x için yazılmış bir komut dosyasını kıracağı bir örnek düşünemiyorum. Yapabilir misin?
sesler

-1

2019: bu kadar basit yazı

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

sonra yeni bir terminali sek, tadını çıkarın!


1
Bir açıklama yapmadan cevabımı kim oyladı?
Feuda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.