Mac OS X Yosemite'deki bash nasıl güncellenir?


25

Sadece bash betiğini biraz öğrenmeye çalışıyorum. Eski bash versiyonum:

Bash version 3.2.53(1)-release...

Mac os x yosemite üzerindeki bashımı homebrew ile güncelledim:

brew update
brew install bash

Sonra terminal özelliklerinde standart kabuk yolunu /bin/bashdeğiştirdim /usr/local/bin/bash(Anladığım kadarıyla homebrew güncellenmiş bash'i yüklüyor).

Sonra sonucu tekrar kontrol ettim (ve hepsi iyi gibi görünüyor):

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

Ama basit bir bash betiği yazmaya çalışırken:

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

SONUÇ IS:

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

YERİNE:

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

Aynı kabuktaki betiği çalıştırmaya çalışırken Bash sürümü neden eskisine dönüştü ??? Bu sadece beni korkutuyor! Lütfen birileri bana sorunumun ne olduğunu açıklar)))

Yanıtlar:


17

Senin problemin ilk satırında. Bu sizde:

#!/bin/bash

hangi açıkça kabuk betiği eskisi ile çalıştırılması gerektiğini belirtir /bin/bash. Ne gerçekten , istediğiniz şudur:

#!/usr/local/bin/bash

Yeni kullanmaya bashgelen /usr/local/bin.


garip bir şey, ama aslında işe yaramadı. Yine aynı sonuç (((Ama bunun bir problemin parçası olduğundan eminim
Drew

Bu yolu başka bir yerde belirtmem gerekir mi? Bazı kabuk dosyalarında mı?
Drew

1
Belki çevre çağıran kabuk, yani eski Bash tarafından ayarlanır? Senaryoyu tam olarak nasıl çağırıyorsun, @Andrew?
slhck

1
@ Andrew, ben senin şüpheli sholduğunu /bin. brewbelki bashdenilen bir sembolik bağlantı yapmadı sh. Senin ile $PATHdoğru seti, böyle başlatmayı deneyin: bash script.sh.
BenjiWiebe

8
Gelecekte #!/usr/bin/env bash
başvurmak için

15

Yeni bash yükle:

brew install bash

Bunu varsayılan kabuk yap:

chsh -s /usr/local/bin/bash

Ortamı bir komut dosyasında ayarlayın:

#!/usr/bin/env bash

Kullanarak env, içindeki Bash'i arayacak $PATHve karşılaştığı ilkini kullanacaksın. Hangisini bashkullanacağını görebilirsiniz which bash. O görüyor ise /bin/bashöncelikle size ayarlamak gerekir $PATHin ~/.bashrcve /.bash_profile.


2
Kullanım sırasında basılmış "standart olmayan kabuk" chshgörürseniz, / etc / shells komutunu güncellemeniz gerekir .
Scott Willeke,

6

Pjv'nin belirttiği gibi, gerçekten kullanmalısın

#!/usr/bin/env bash

Scriptlerinizdeki her yerde taşınabilir olmak. Örneğin betiğinizi çalıştırmayı denerseniz

#!/usr/local/bin/bash

çoğu linux sistemde başarısız olur.

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.