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.