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.