Чи безпечно оновити Bash через Homebrew?


80

Я новачок у ОС X. Я запускаю OS X Lion на MacBook Pro. Чи безпечно оновити bash shell за допомогою Homebrew:

$ brew install bash

Як безпечно, як я можу зробити його екземпляром оболонки, яку я запускаю через термінал, за замовчуванням?

Дякую!


2
Це питання раптом стало надзвичайно актуальним, див. Shellshock
ecnepsnai

Так. 10
годин

Відповіді:


102

Бінарні файли в, /{,usr/}{,s}bin/як правило, не повинні бути замінені іншими файлами. Інші програми очікують, що це версії, що постачаються з OS X, і їх замінюють оновлення ОС.

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

  • Додавання /usr/local/bin/bashдо/etc/shells
  • Біг chsh -s /usr/local/bin/bash.

Налаштування в Terminal або iTerm 2 зазвичай не потрібно змінювати. Обидва вони за замовчуванням відкривають нові вікна з оболонкою входу оболонки за замовчуванням.

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


Схоже, це спрацювало, і якщо у мене виникли якісь проблеми, його слід легко відкатати! Дякую!
Руді

не знав, що розширена сторінка варіантів є. Солодке!
lemonginger

2
/etc/shellsПотрібно небагато відомостей про редагування, щоб увімкнути встановлений варінням bash. Інакше (принаймні на моїй машині) термінал відмовиться запускати.
brendanjerwin

2
Третя команда (csh -s) більше не потрібна Mavericks 10.9.2.
Brent Faust

2
Мені просто довелося brew install bashдля цього працювати. (тобто не потрібно було змінювати /etc/shells)
Даніель,

4

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

Щодо Терміналу, ви можете зробити оболонки відкритими за допомогою власної спеціальної команди. Перейдіть до Налаштування> Запуск та виберіть Оболонки, відкриті за допомогою: Команда (повний шлях) . Просто введіть шлях до нового bashта вуала!

Сподіваюся, це допомагає!

BTW: Резервне копіювання! Найкраща порада в таких ситуаціях!


Ей, ви знаєте що, ця відповідь насправді працює як принадність
Кастієль,

0

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

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

Потім створіть символьне посилання на виконуваний файл bash, який завантажив Homebrew. Я думаю, це буде в / usr / local / льоху, як так

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

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


3
Недоліком запуску нового баш-версії для версії системи є будь-яке оновлення ОС, яке може стерти вашу бажану оболонку. Імовірно, ОП хоче використовувати нові функції, які можуть зламатися, якщо ОС встановить "нову, ніж стару ОС", але "старшу за користувальницьку" версію 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.