Безопасно ли обновлять Bash через Homebrew?


82

Я новичок в OS X. Я использую OS X Lion на MacBook Pro. Безопасно ли обновлять оболочку bash с помощью Homebrew:

$ brew install bash

Если это безопасно, как мне сделать его стандартным экземпляром оболочки, которую я запускаю через Терминал?

Спасибо!


2
Этот вопрос внезапно стал чрезвычайно актуальным, смотрите Shellshock
ecnepsnai

Да. 10 символов
shrx

Ответы:


105

Двоичные файлы /{,usr/}{,s}bin/обычно не следует заменять другими файлами. Другие программы ожидают, что они будут версиями, поставляемыми с OS X, и их заменят обновления ОС.

После запуска brew install bashвы можете безопасно изменить оболочку по умолчанию:

  • Добавление /usr/local/bin/bashк/etc/shells
  • Запуск chsh -s /usr/local/bin/bash.

Настройки в Терминале или iTerm 2 обычно не нужно менять. Оба они по умолчанию открывают новые окна с помощью оболочки входа по умолчанию.

Оболочку по умолчанию также можно изменить из Системных настроек или с помощью dscl, но все три параметра просто изменяются /var/db/dslocal/nodes/Default/users/$USER.plist.


Похоже, это сработало, и если у меня возникнут какие-либо проблемы, откатить будет легко! Спасибо!
Руди

не знал, что расширенная опция страницы была там. Сладкий!
Лемонджингер

2
Немного о редактировании, /etc/shellsчтобы включить bash-установленный bash. В противном случае (по крайней мере, на моей машине) Терминал откажется запускаться.
brendanjerwin

2
Третья команда (csh -s) больше не требуется на Mavericks 10.9.2.
Брент Фауст

2
Мне просто нужно было, чтобы brew install bashэто работало. (т.е. не нужно было изменять /etc/shells)
Даниэль

4

Я могу ошибаться, но, насколько я знаю brew, установит свой собственный экземпляр bash, поскольку brew работает под, /usr/local/binа система по умолчанию работает под /bin/usr/bin).

Что касается терминала, вы можете открывать оболочки с помощью собственной, настраиваемой команды. Перейдите в «Настройки»> «Запуск» и выберите « Оболочки, открытые с помощью: Команда (полный путь)» . Просто введите путь к вашему новому bashи вуаля!

Надеюсь, это поможет!

Кстати: резервное копирование! Лучший совет в этой ситуации!


эй, вы знаете, что, этот ответ на самом деле работает как очарование
Кастиэль

0

Задолго до того, как вы что-то сделаете, сделайте резервную копию вашего текущего файла (конечно, но всегда стоит сказать)

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

Затем создайте символическую ссылку на исполняемый файл bash, загруженный Homebrew. Я думаю, что это будет в / usr / local / Cellar, вот так

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

Теперь / bin / bash указывает на файл в вашем каталоге usr / local


3
Недостатком установки нового bash для версии системы является то, что любое обновление ОС может стереть вашу предпочитаемую оболочку. Предположительно, ОП хочет использовать новые функции, которые могут выйти из строя, если ОС установит «более новую, чем старая», но «более старую, чем пользовательскую» версию bash. Лучше изменить путь по умолчанию или изменить переменную оболочки пользователя.
bmike

ну, вы можете просто создать новую simlink, так как она не будет перезаписывать версию bash в вашем каталоге usr / local. но вы правы, путь Даниэля, вероятно, лучше
lemonginger

Ооо - отредактируйте свой ответ, пожалуйста, чтобы поставить его первым (и сохранить первоначальную идею, если вы предпочитаете в качестве второй альтернативы - мне это нравится намного больше, и я хотел бы получить шанс отменить мой голос :-)
bmike

1
хм, хорошо, что / это / то, что я сказал, но я отредактировал, чтобы попытаться уточнить, что каждый шаг делает немного лучше. Тем не менее, думаю, что лучший ответ, вероятно, лучше, хотя :)
lemonginger

Это кажется довольно опасным способом изменить системную оболочку.
Сэмюэль Микел Боулз

0

Я думаю, что это безопасно, если вы просто запустите

brew install bash

а затем добавить его в качестве оболочки по умолчанию

chsh -s /usr/local/bin/bash

так как вы изменяете только своего текущего пользователя. Тем не менее, я заметил , что мой по умолчанию ~ / .profile является

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

поэтому его нужно обновить. Я изменил это на

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

Посмотрите другие ответы, почему chshодного недостаточно. Кроме того, ваш обновленный фрагмент .profile выглядит идентично оригинальному
nohillside

@patrix: спасибо за указание, я обновил второй фрагмент. Было бы неплохо, если brew install bashбы не потребовалось никаких дальнейших действий. С обновленным профилем, которым я поделился, это не так. Я надеюсь, что это может помочь другим.
Джанлука Касати
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.