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!


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.


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!


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


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.