Czy rzeczywiście można zaktualizować bash do wersji 4.0 w OSX Yosemite?
echo $BASH_VERSION
3.2.57(1)-release
Ten artykuł i ten wątek odnoszą się do tego samego pytania, ale instalują nową powłokę obok siebie ze starą. Czy istnieje sposób na bezpośrednią aktualizację starej powłoki bash?
macos
terminal
bash
command-line
sluijs
źródło
źródło
Odpowiedzi:
Apple nie zaktualizuje Bash, ponieważ najnowsza wersja jest licencjonowana na licencji GPLv3, z której Apple nie może korzystać. Zaktualizowali jednak większość swoich innych powłok. Na przykład ZSH jest w większości aktualny.
Bibliografia:
Po krótkich badaniach wydaje się to podstawowym problemem:
Wymagałoby to, aby w przeciwnym razie oprogramowanie z zamkniętym kodem źródłowym mogło być modyfikowane przez społeczeństwo, co oczywiście stanowiłoby problem dla Apple.
źródło
bash
. Klauzula „Tivoization” może wyjaśniać, dlaczegobash
nie można jej zaktualizować, powiedzmy, na Apple TV, ale tak naprawdę nie na komputerze Mac. Ponadto „części objęte licencją GPL” musiałyby już zostać zmodyfikowane przez społeczeństwo; Wersja 3 tego nie zmieni. Uważam , że klauzula patentowa GPL v3 byłaby wystarczająca, aby powstrzymać Apple przed dotknięciem kodu GPL v3.Czy rzeczywiście można zaktualizować bash do wersji 4.0 w OSX Yosemite? Tak.
Pobierz / zainstaluj homebrew http://brew.sh/ , uruchamiając to polecenie w terminalu.
Zamknij i ponownie otwórz terminal. następnie wpisz
Zmień domyślną powłokę za pomocą terminala GUI z dosłowną ścieżką twojego nowego basha (EDYCJA: Muszę jeszcze znaleźć sposób CLI, który działa)
Czy rzeczywiście można zaktualizować bash do dostarczonej przez Apple wersji bash 4.0 w OSX Yosemite?
EDYCJA: Nie. Nie tak, jak prosi operacja. Np. Uaktualnij bieżącą instalację, zastępując się. W innych odpowiedziach zauważono, że Apple nie zaktualizowało basha z powodu problemów licencyjnych. Jednak pobranie zaktualizowanej i oddzielnej wersji basha i używanie jej jako domyślnej powłoki jest kanonicznym rozwiązaniem dla większości tłumaczy. Weźmy na przykład pytona. Nie uaktualniasz wersji 2.7 do 3.5, pobierasz osobną wersję i zmieniasz domyślną.
źródło
sudo chpass -s /usr/local/bin/bash
. Uwaga: najlepiej wskazać dowiązanie symboliczne w/usr/local/bin/
ten sposób, że Brew może obsługiwać aktualizacje bez konieczności zmiany środowiska za każdym razem.sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
następniechsh -s /usr/local/bin/bash
ustawi domyślną powłokę dla terminalaJak powiedział @William w swojej odpowiedzi, Apple nie zapewnia bash 4 z powodu ograniczeń GPL. Możesz jednak zainstalować bash 4+, a także ustawić go jako domyślną powłokę (w tym dla terminala i iTerm2 ), wykonując następujące czynności.
Zainstaluj Bash 4 przez Homebrew
Najpierw zainstaluj nowszą wersję bash. Są na to różne sposoby, wolę Homebrew.
brew install bash
.Bash 4 jest teraz dostępny na twojej ŚCIEŻCE (zakładając, że bin Homebrew jest na twojej ścieżce). Jednak nie jest to jeszcze twoja domyślna powłoka. Możesz dowiedzieć się, gdzie się znajduje, uruchamiając
which bash
. W moim przypadku jest to/usr/local/bin/bash
.Korzystanie z Bash 4
Ponieważ jest na twojej ŚCIEŻCE, możesz rozpocząć sesję Bash 4 za pomocą just
bash
lub można jej użyć w skryptach za pomocą Shebang .Na przykład użyje określonej instancji bash.
Spowoduje to użycie pierwszego uderzenia na ścieżce.
Możesz także ustawić ścieżkę bash dla określonych profili w Terminalu / iTerm2, wykonując kroki opisane w odpowiedzi @ user136952.
Ustaw Bash 4 jako domyślny
Jak wspomniano powyżej, po zainstalowaniu Bash 4 nadal nie jest domyślną powłoką. Aby ustawić bash jako domyślny, musisz wykonać jeszcze dwa kroki.
Najpierw dodaj ścieżkę Bash 4 do swojego
/etc/shells
pliku, aby była to dozwolona powłoka logowania. Jak opisano w / etc / shells , ten plik ma listę poprawnych powłok logowania. Po dodaniu nowej ścieżki bash/etc/shells
wygląda to tak:Następnie używamy chsh, aby ustawić go jako domyślną powłokę. Tak więc wszelkie sesje dla tego użytkownika będą korzystać z tej powłoki. Możesz przeczytać więcej na ten temat w sekcji Zmień powłokę w terminalu Mac OS X , ale rzeczywiste polecenie jest bardzo proste.
Teraz nowy bash jest naszą domyślną powłoką logowania. Jeśli otworzysz Terminal lub iTerm2 i uruchomisz
bash --version
, powinieneś zobaczyć nową wersję. Zwróć uwagę na „Licencję GPLv3 +”, dlatego Apple nie dołącza jej do systemu macOS.źródło
sudo chpass -s /usr/local/bin/bash
zmienia moją powłokę tylko na root / sudo . Aby zmienić dla mojego regularnego logowania, muszę uruchomić polecenie bezsudo
. Może to być usługa Active Directory; Nie jestem pewny.#!/usr/local/bin/bash
shebang, spójrz na using#!/usr/bin/env bash
( wyjaśnienie ). Spowoduje to uruchomienie skryptu z dowolną wersją bash dostępną dla środowiska, które uruchamia skrypt, tj. Cokolwiekwhich bash
zwraca. To bardziej przenośne rozwiązanie korzystające z określonych ścieżek. Nie możemy oczekiwać, że inni użytkownicy zainstalują bash poprzez Homebrew.Możesz zainstalować inną wersję Bash bez homebrew
I postępuj zgodnie z instrukcjami tutaj: https://gist.github.com/samnang/1759336
Pobierz i zainstaluj wersję bash, którą chcesz Zamień XX (w bash-XX) na wersję, którą chcesz, np. 4.4
Możesz chcieć dodać alias, jeśli chcesz, aby używało go polecenie bash. Umieść w swoim ~ / .bash_profile
źródło
Instalacja równoległa z aktualizacją powłoki (przez chsh lub GUI) zakończy się niepowodzeniem dla skryptów. Często używane są skrypty
env bash
, które powracają do wersji bash OS X. Tak więc, czego chcesz, może nie być pełna aktualizacja bash, ale instalacja side-by-side, która zawsze zwraca nowszą wersję bash (tj. Nawet poenv
wywołaniu).Aby sobie z tym poradzić:
1) zainstaluj bash przez Homebrew, tak jak napisali inni komentatorzy
2) ustaw powłokę logowania na tę nową wersję (za pomocą GUI lub komendy chsh, jak napisali inni)
3) ustaw
/usr/local/bin
(lub ścieżkę do nowej wersji bash) przed/bin
swoją zmienną $ PATH, dodając ją do~/.bash_profile
:export PATH=/usr/local/bin:$PATH
źródło
.bash_profile
, więc i tak wpłynęłoby to tylko na działanie uruchamiane bezpośrednio w terminalu.2019: Tak proste jak w tym poście
następnie wstaw nowy terminal, ciesz się!
źródło