Czy aktualizacja Bash przez Homebrew jest bezpieczna?

81

Jestem nowy w OS X. Używam OS X Lion na MacBooku Pro. Czy można bezpiecznie zaktualizować powłokę bash za pomocą Homebrew:

$ brew install bash

Jeśli to bezpieczne, w jaki sposób mogę ustawić go jako domyślną instancję powłoki uruchamianej przez Terminal?

Dzięki!

Rudy
źródło
2
To pytanie nagle stało się niezwykle istotne, patrz Shellshock
ecnepsnai,
Tak. 10 znaków
shrx

Odpowiedzi:

105

Pliki binarne w /{,usr/}{,s}bin/zwykle nie powinny być zastępowane innymi plikami. Inne programy oczekują, że będą to wersje dostarczane z systemem OS X i zostaną zastąpione aktualizacjami systemu operacyjnego.

Po uruchomieniu brew install bashmożesz bezpiecznie zmienić domyślną powłokę poprzez:

  • Dodawanie /usr/local/bin/bashdo/etc/shells
  • Bieganie chsh -s /usr/local/bin/bash.

Ustawienia w Terminalu lub iTerm 2 zwykle nie muszą być zmieniane. Oba domyślnie otwierają nowe okna za pomocą powłoki logowania domyślnej powłoki.

Domyślną powłokę można również zmienić w Preferencjach systemowych lub za pomocą dscl, ale wszystkie trzy opcje po prostu się zmieniają /var/db/dslocal/nodes/Default/users/$USER.plist.

Daniel
źródło
Wygląda na to, że zadziałało, a jeśli wystąpią jakiekolwiek problemy, powinno być łatwo wycofać! Dzięki!
Rudy,
nie wiedziałem, że jest tam strona z opcjami zaawansowanymi. Słodkie!
lemonginger
2
/etc/shellsWymagana jest odrobina edytowania w celu uwzględnienia bash instalowanego podczas parzenia. W przeciwnym razie (przynajmniej na moim komputerze) Terminal odmówi uruchomienia.
brendanjerwin
2
Trzecie polecenie (csh -s) wydaje się nie być już konieczne w Mavericks 10.9.2.
Brent Faust
2
Musiałem tylko, żeby brew install bashto zadziałało. (tzn. nie /etc/shells
Daniel
4

Mógłbym się tutaj mylić, ale o ile wiem brew, zainstalowałbym własną instancję bash, ponieważ brew działa pod, /usr/local/bina domyślne ustawienia systemu działają pod /bin(i /usr/bin).

O Terminalu możesz otwierać powłoki za pomocą własnego, niestandardowego polecenia. Przejdź do Preferencje> Uruchamianie i wybierz Powłoki otwarte za pomocą: Polecenia (pełna ścieżka) . Po prostu wpisz ścieżkę do swojej nowej bashi vuala!

Mam nadzieję, że to pomoże!

BTW: Kopia zapasowa! Najlepsza rada w takich sytuacjach!

kevin9794
źródło
hej, wiesz co, ta odpowiedź naprawdę działa jak urok
castiel,
0

Zanim zrobisz cokolwiek, wykonaj kopię zapasową bieżącego pliku (oczywiście, ale zawsze zasługuje na to, aby powiedzieć)

sudo cp /bin/bash /bin/bash.3.2.bk

Następnie utwórz symboliczne łącze do pliku wykonywalnego bash, który Homebrew pobrał. Myślę, że tak będzie w / usr / local / Cellar

sudo ln -s /usr/local/Cellar/bash/4.2.10/bin/bash /bin/bash

Teraz / bin / bash wskazuje plik w katalogu usr / local

lemonginger
źródło
3
Wadą wprowadzenia nowego basha w wersji systemowej jest to, że każda aktualizacja systemu operacyjnego może wymazać preferowaną powłokę. Przypuszczalnie OP chce korzystać z nowych funkcji, które mogłyby się zepsuć, gdyby system operacyjny zainstalował „nowszą niż stary”, ale „starszą niż niestandardową” wersję bash. Lepiej zmienić domyślną ścieżkę lub zmienić zmienną powłoki użytkownika.
bmike
cóż, możesz po prostu utworzyć nowy link, ponieważ nie zastąpi on wersji bash w twoim katalogu usr / local. ale masz rację, sposób Daniela jest prawdopodobnie lepszy
lemonginger
Ooh - zredaguj swoją odpowiedź, aby umieścić ją na pierwszym miejscu (i zachowaj oryginalny pomysł, jeśli wolisz jako drugą alternatywę - podoba mi się to znacznie lepiej i chętnie
odwrócę
1
hmm, cóż, to / is / to, co powiedziałem, ale edytowałem, aby spróbować wyjaśnić, co każdy krok robi trochę lepiej. Nadal uważam, że najlepiej oceniana odpowiedź jest prawdopodobnie lepsza :)
lemonginger
To wydaje się dość niebezpiecznym sposobem na zmianę powłoki systemu.
Samuel Mikel Bowles,
0

Myślę, że to bezpieczne, jeśli po prostu uruchomisz

brew install bash

a następnie dodaj go jako domyślną powłokę

chsh -s /usr/local/bin/bash

ponieważ modyfikujesz tylko bieżącego użytkownika. Zauważyłem jednak, że mój domyślny ~ / .profile to

if [ "/bin/bash" == $BASH ]; then
    source ~/.bashrc
fi

więc musi zostać zaktualizowany. Zmieniłem to na

if [ "bash" == $(basename $BASH) ]; then
        source ~/.bashrc
fi
Gianluca Casati
źródło
Zobacz inne odpowiedzi, dlaczego chshsam nie wystarczy. Również twój zaktualizowany fragment .profile wygląda identycznie jak oryginalny
nohillside
@patrix: dzięki podkreśleniu zaktualizowałem drugi fragment kodu. Byłoby miło, gdyby brew install bashnie wymagało żadnych dalszych działań. W przypadku zaktualizowanego profilu, który udostępniłem, nie działa. Mam nadzieję, że to może pomóc innym.
Gianluca Casati