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

82

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

$ brew install bash

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

Спасибо!

Rudy
источник
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и вуаля!

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

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

kevin9794
источник
эй, вы знаете, что, этот ответ на самом деле работает как очарование
Кастиэль
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

lemonginger
источник
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бы не потребовалось никаких дальнейших действий. С обновленным профилем, которым я поделился, это не так. Я надеюсь, что это может помочь другим.
Джанлука Касати