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

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

$ brew install bash

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

Спасибо!

Этот вопрос вдруг стал крайне актуален, см. Shellshock
Да. 10 символов

Ответы (4)

Двоичные файлы /{,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.

Похоже, это сработало, и если у меня возникнут какие-либо проблемы, будет легко откатиться! Спасибо!
не знал, что там есть страница дополнительных параметров. Сладкий!
Немного о редактировании /etc/shells, чтобы включить bash, установленный brew, требуется. В противном случае (по крайней мере, на моей машине) Терминал откажется запускаться.
Третья команда (csh -s) больше не нужна в Mavericks 10.9.2.
Я просто должен был, чтобы brew install bashэто сработало. (т.е. не нужно было изменять /etc/shells)

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

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

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

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

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

Прежде чем что-либо делать, сделайте резервную копию вашего текущего файла (конечно, но всегда стоит сказать об этом)

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

Недостатком установки нового bash для системной версии является то, что любое обновление ОС может стереть предпочитаемую вами оболочку. Предположительно, OP хочет использовать новые функции, которые могут сломаться, если ОС установит «более новую, чем старая ОС», но «более старую, чем пользовательская» версия bash. Лучше изменить путь по умолчанию или изменить пользовательскую переменную оболочки.
ну, вы можете просто создать новую симлинк, так как она не перезапишет версию bash в вашем каталоге usr/local. но вы правы, путь Даниэля наверное лучше
О, отредактируйте свой ответ, пожалуйста, чтобы поставить это первым (и сохраните исходную идею, если вы предпочитаете в качестве второго варианта - мне это нравится намного больше, и я хотел бы иметь возможность отменить свой голос :-)
хм, ну, это /это/ то, что я сказал, но я отредактировал, чтобы попытаться уточнить, что каждый шаг делает немного лучше. Тем не менее, думаю, что ответ с самым высоким рейтингом, вероятно, лучше :)
Это кажется довольно опасным способом изменить системную оболочку.
Почему? его можно перевернуть в любой момент.
Если вы сделаете это, вы действительно должны указать независимый от версии путь /usr/local/opt/bash/bin/bash вместо версионного пути Cellar.

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

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 выглядит идентично исходному.
@patrix: спасибо, что указали на это, я обновил второй фрагмент. Было бы неплохо, если brew install bashбы не требовалось никаких дополнительных действий. С обновленным профилем, которым я поделился, это не так. Я надеюсь, что это может помочь другим.