Apple не будет обновлять Bash, потому что последняя версия находится под лицензией GPLv3, которую Apple не может использовать. Однако они обновили большинство своих других оболочек. ZSH, например, в основном обновлен.
Использованная литература:
После небольшого исследования это кажется основной проблемой:
Когда люди распространяют Пользовательские продукты, включающие программное обеспечение под GPLv3, раздел 6 требует, чтобы они предоставили вам информацию, необходимую для модификации этого программного обеспечения. Пользовательские продукты — это термин, специально определенный в лицензии; Примеры пользовательских продуктов включают портативные музыкальные проигрыватели, цифровые видеомагнитофоны и системы домашней безопасности.
Это потребовало бы, чтобы части программного обеспечения с закрытым исходным кодом, находящиеся под лицензией GPL, могли быть изменены публикой, что, очевидно, было бы проблемой для Apple.
bash
. Пункт «Tivoization» может объяснить, почему bash
нельзя обновиться, скажем, на Apple TV, но не на настольном Mac. Кроме того, «части под GPL» уже должны быть доступны для изменения публикой; v3 не изменит этого. Я полагаю , что пункта о патентах GPL v3 будет достаточно, чтобы удержать Apple от прикосновения к коду GPL v3.Как сказал @William в своем ответе, Apple не предоставляет bash 4 из-за ограничений GPL. Однако вы можете установить bash 4+, а также сделать его оболочкой по умолчанию (в том числе для Terminal и iTerm2 ), выполнив следующие действия.
Сначала установите более новую версию bash. Есть разные способы сделать это, я предпочитаю Homebrew.
brew install bash
.Bash 4 теперь доступен в вашем PATH (при условии, что корзина Homebrew находится на вашем пути). Однако это еще не ваша оболочка по умолчанию. Вы можете найти, где он находится, запустив which bash
. В моем случае это на /usr/local/bin/bash
.
Так как он находится в вашем PATH, вы можете начать сеанс Bash 4 с просто bash
или его можно использовать в сценариях с помощью Shebang .
Например, это будет использовать конкретный экземпляр bash.
#!/usr/local/bin/bash
...your script...
Это будет использовать первый удар в ПУТИ.
#!/usr/bin/env bash
...your script...
Вы также можете установить путь bash для определенных профилей в Terminal/iTerm2, используя шаги, описанные в ответе @user136952.
Как было сказано выше, после установки Bash 4 по-прежнему не является оболочкой по умолчанию. Чтобы сделать bash по умолчанию, вам нужно сделать еще два шага.
Во-первых, добавьте путь Bash 4 к вашему /etc/shells
файлу, чтобы он был разрешенной оболочкой входа. Как описано в /etc/shells , этот файл содержит список допустимых оболочек входа в систему. После добавления нового пути bash мой /etc/shells
вид выглядит следующим образом:
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/bash
Затем мы используем chsh, чтобы сделать его оболочкой по умолчанию. Таким образом, любые сеансы для этого пользователя будут использовать эту оболочку. Вы можете прочитать больше об этом в разделе «Изменение оболочки в терминале Mac OS X », но на самом деле команда очень проста.
chsh -s /usr/local/bin/bash
Теперь новый bash является нашей оболочкой входа по умолчанию. Если вы откроете Терминал или iTerm2 и запустите bash --version
, вы должны увидеть новую версию. Обратите внимание на «Лицензия GPLv3+», поэтому Apple не связывает ее с macOS.
$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.6.0)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
sudo chpass -s /usr/local/bin/bash
изменяет мою оболочку только для root/sudo . Чтобы перейти на мой обычный логин, я должен запустить команду без sudo
. Это может быть связано с Active Directory; Я не уверен.#!/usr/local/bin/bash
шебанг, изучите использование #!/usr/bin/env bash
( объяснение ). Это запустит скрипт с любой версией bash, доступной среде, которая запускает скрипт, т.е. с любой версией, которая which bash
возвращается. Это более портативное решение, использующее определенные пути. Мы не можем ожидать, что другие пользователи установят bash через homebrew.env
метод, потому что он упрощает повторное использование сценариев между macOS и Linux, например, между хостом и виртуальными машинами.chsh
был критическим недостающим шагом для меня. Спасибо.brew install bash
, команда which bash
просто укажет на версию bash 3.4, установленную по умолчанию в macOS, а не на версию, которую вы только что установили с помощью homebrew./usr/
. Выполнение sudo
и редактирование /etc/shells
кажется неуместным, это было бы похоже на редактирование /etc/paths
непосредственно для всех ваших исполняемых файлов, а не в $PATH
файле .bashrc
.Можно ли на самом деле обновить bash до версии 4.0 в OSX Yosemite? Да.
Загрузите/установите homebrew http://brew.sh/ , выполнив эту команду в терминале.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Выйдите и снова откройте терминал. затем введите
brew install bash
Измените оболочку по умолчанию через графический интерфейс терминала, указав буквальный путь к вашему новому bash (EDIT: мне еще предстоит найти работающий способ CLI)
Можно ли на самом деле обновить bash до версии 4.0 , предоставленной Apple, в OSX Yosemite?
РЕДАКТИРОВАТЬ: Нет. Не так, как спрашивает оператор. Например, обновите текущую установку, заменив себя. В других ответах было отмечено, что Apple не обновляла bash из-за проблем с лицензированием. Однако загрузка обновленной и отдельной версии bash и использование ее в качестве оболочки по умолчанию является каноническим решением для большинства интерпретаторов. Возьмем, к примеру, питон. Вы не обновляете 2.7 до 3.5, вы загружаете отдельную версию и меняете свою по умолчанию.
sudo chpass -s /usr/local/bin/bash
. Примечание. Лучше всего указывать символическую ссылку /usr/local/bin/
, чтобы Brew мог обрабатывать обновления без необходимости каждый раз менять среду.sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
затем chsh -s /usr/local/bin/bash
установит оболочку по умолчанию для терминалаbash
версии очень мало риска, /usr/local/bin/bash
потому что она оставляет систему в /bin/bash
покое. Таким образом, любые системные зависимости bash 3
будут сохранены.Вы можете установить другую версию Bash без доморощенного
И следуйте инструкциям здесь: https://gist.github.com/samnang/1759336
Загрузите и установите нужную версию bash. Замените XX (в bash-XX) на нужную версию, например 4.4.
curl -O http://ftp.gnu.org/gnu/bash/bash-X.X.tar.gz tar xzf bash-X.X.tar.gz cd bash-X.X ./configure --prefix=/usr/local && make && sudo make install
Добавьте новую оболочку в список допустимых оболочек.
sudo bash -c "echo /usr/local/bin/bash >> /private/etc/shells"
Сменить оболочку для пользователя
chsh -s /usr/local/bin/bash
Проверьте наличие Bash 4 и /usr/local/bin/bash...
echo $BASH && echo $BASH_VERSION
Вы можете добавить псевдоним, если хотите, чтобы команда bash использовала его. Поместите в свой ~/.bash_profile
alias bash="/usr/local/bin/bash"
/bin/bash
? Это потому, что это необходимо для совместимости с другим «старинным» программным обеспечением, которое Apple распространяет в MacOS?/usr/local
. Если вы предпочитаете, чтобы они были организованы в bash-X.X
каталоге, добавьте /bash-X.X
к параметру префикса в ./configure
команде./bin
каталог, если вы не отключите файлы SIP
.Параллельная установка с обновлением вашей оболочки (через chsh или графический интерфейс) не будет работать для скриптов. Сценарии часто используют env bash
, который возвращается к версии OS X bash. Таким образом, вам может понадобиться не полное обновление bash, а параллельная установка , которая всегда возвращает более новую версию bash (т.е. даже при env
вызове).
Итак, чтобы справиться с этим:
1) установить bash через Homebrew, как писали другие комментаторы
2) установите для своей оболочки входа в эту новую версию (через графический интерфейс или команду chsh, как писали другие)
3) установите /usr/local/bin
(или путь к новой версии bash) перед /bin
вашей переменной $PATH, добавив это в свой ~/.bash_profile
:export PATH=/usr/local/bin:$PATH
.bash_profile
, поэтому в любом случае это повлияет только на то, что вы запускаете непосредственно в терминале.2019: Все просто, как в этом посте
$ brew install bash
$ sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
$ chsh -s /usr/local/bin/bash
затем откройте новый терминал, наслаждайтесь!
Для компьютеров Mac M1 -
Вы можете обновить bash, выполнив
brew install bash
при условии, что у вас уже есть Home-brew. Это установит последнюю версию bash. Вы можете проверить установку, запустив -
brew info bash
Чтобы обновить оболочку, просто перезапустите терминал и проверьте версию bash, используя -
bash --version
Надеюсь это поможет.
лупинчо
пользователь3439894
Прайм624
Джейсон С