- Обновление bash до версии 4.0 на OSX
- 4 ответа
- Обновите bash до версии 4.0 на OSX
- Установите Bash 4 через Homebrew
- Использование Bash 4
- Делаем Bash 4 по умолчанию
- Install Bash 5 on macOS
- Manual Installation
- How the new and the old bash interact
- bash v5 and Scripting
- Changing a user’s default Shell to bash v5
- Packaging bash v5 for mass deployment
- Automate the package creation
- Related
- 20 thoughts on “Install Bash 5 on macOS”
Обновление bash до версии 4.0 на OSX
Можно ли обновить bash до версии 4.0 в OSX Yosemite?
Эта статья и это поток относятся к одному и тому же вопросу, но они устанавливают новую оболочку бок о бок со старым. Есть ли способ напрямую обновить старую оболочку bash?
4 ответа
Apple не будет обновлять Bash, потому что последняя версия лицензируется под лицензией GPLv3, которую Apple не может использовать. Однако они обновили большинство своих других снарядов. Например, ZSH в основном обновляется.
После небольшого исследования это кажется основной проблемой:
Когда люди распространяют продукты пользователя, которые включают программное обеспечение под GPLv3, раздел 6 требует, чтобы они предоставили вам информацию, необходимую для изменения этого программного обеспечения. Пользовательские продукты — это термин, специально определенный в лицензии; примеры продуктов пользователя включают портативные музыкальные проигрыватели, цифровые видеомагнитофоны и домашние системы безопасности.
Это потребует, чтобы в противном случае программное обеспечение с закрытым исходным кодом, его части GPL’d были модифицированы публикой, что, очевидно, было бы проблемой для Apple.
Можно ли обновить bash до версии 4.0 в OSX Yosemite? Да.
Загрузить /установить homebrew http://brew.sh/ выполнив эту команду в терминале.
Закройте и снова откройте терминал. затем введите
Измените оболочку по умолчанию через терминал gui с литеральным путем вашего нового bash (EDIT: мне еще нужно найти способ CLI, который работает)
Возможно ли обновить bash до предоставленного Apple bash версии 4.0 в OSX Yosemite?
EDIT: Нет. Не так, как спрашивает оп. Например, обновите текущую установку путем ее замены. В других ответах было отмечено, что Apple не обновила bash из-за проблем с лицензированием. Однако для большинства интерпретаторов загрузка обновленной и отдельной версии bash и использование ее в качестве оболочки по умолчанию является каноническим решением. Возьмем, например, python. Вы не обновляете 2.7 до 3.5, вы загружаете отдельную версию и меняете свое значение по умолчанию.
Как сказал @William в своем ответе, Apple не предоставляет bash 4 из-за ограничений GPL. Однако вы можете установить bash 4+, а также сделать его своей оболочкой по умолчанию (в том числе для терминалов и iTerm2 ), сделав следующее.
Сначала установите новую версию bash. Есть разные способы сделать это, я предпочитаю Homebrew.
- Установите Homebrew, как описано в http://brew.sh .
- Установите bash с помощью brew install bash .
Теперь доступен Bash и активная оболочка для текущего сеанса. Вы можете найти, где он находится, запустив which bash . В моем случае это находится в /usr/local/bin/bash . Этот новый bash теперь можно использовать в сценариях, используя Shebang с новым путём bash в начале скриптов. Вы также можете использовать его для определенных профилей в терминале /iTerm2, используя шаги, описанные в ответе @ user136952.
Я предполагаю, что вы подразумеваете под «бок о бок» в своем вопросе. Чтобы сделать bash по умолчанию, вам нужно сделать еще два шага.
Сначала добавьте этот путь bash к вашему файлу /etc/shells . Как описано в /etc /shells , этот файл имеет список допустимых оболочек входа. Прежде чем новый bash будет по умолчанию, он должен быть действительным. После добавления нового пути bash мой /etc/shells выглядит следующим образом:
Наконец, мы можем использовать chsh, чтобы сделать его оболочкой по умолчанию. Подробнее об этом можно узнать в Изменить оболочку в Mac OS X Терминал , но фактическая команда очень проста.
Теперь новый bash является нашей стандартной оболочкой. Если вы откроете терминал или iTerm2 и запустите bash —version , вы увидите новую версию. Обратите внимание на «Лицензия GPLv3 +», поэтому Apple не связывает ее с macOS.
Совместимость сборок с обновлением вашей оболочки (через chsh или GUI) не будет выполняться для скриптов. Скрипты часто используют env bash , который возвращается к версии OS X bash. Итак, вы не можете быть полным обновлением bash, но бок о бок установить , который всегда возвращает более новую версию bash (т. Е. Даже если env вызывается).
Итак, чтобы справиться с этим:
1) установите bash через Homebrew, поскольку другие комментаторы разместили
2) установите вашу оболочку для входа в эту новую версию (через команду GUI или chsh, как опубликовали другие)
3) установите /usr/local/bin (или путь к новой версии bash) перед /bin в переменной $ PATH, добавив это к ваш
/.bash_profile : export PATH=/usr/local/bin:$PATH
Источник
Обновите bash до версии 4.0 на OSX
Можно ли реально обновить bash до версии 4.0 в OSX Yosemite?
Эта статья и эта тема ссылаются на один и тот же вопрос, но они устанавливают новую оболочку рядом со старой. Есть ли способ напрямую обновить старую оболочку bash?
Apple не будет обновлять Bash, потому что последняя версия лицензирована под GPLv3, которую Apple не может использовать. Они обновили большинство своих других оболочек, хотя. ZSH, например, в основном в курсе.
После небольшого исследования это кажется основной проблемой:
Когда люди распространяют Пользовательские продукты, которые включают программное обеспечение в соответствии с GPLv3, раздел 6 требует, чтобы они предоставили вам информацию, необходимую для модификации этого программного обеспечения. Пользовательские продукты — это термин, специально определенный в лицензии; Примерами пользовательских продуктов являются портативные музыкальные проигрыватели, цифровые видеомагнитофоны и системы домашней безопасности.
Это потребовало бы, чтобы в противном случае для программного обеспечения с закрытым исходным кодом его части под GPL были сделаны доступными для модификации, что, очевидно, было бы проблемой для Apple.
Можно ли реально обновить bash до версии 4.0 в OSX Yosemite? Да.
Загрузите / установите homebrew http://brew.sh/ , запустив эту команду в терминале.
Выйдите и снова откройте свой терминал. затем введите
Измените оболочку по умолчанию через графический интерфейс терминала с буквальным путем вашего нового bash (РЕДАКТИРОВАТЬ: я еще не нашел способ CLI, который работает)
Можно ли реально обновить bash до версии 4.0 , предоставленной Apple, в OSX Yosemite?
РЕДАКТИРОВАТЬ: Нет. Не в том смысле, о котором просит опера. Например, обновите текущую установку путем замены. В других ответах было отмечено, что Apple не обновила bash из-за проблем с лицензированием. Однако загрузка обновленной и отдельной версии bash и использование ее в качестве оболочки по умолчанию является каноническим решением для большинства переводчиков. Взять, к примеру, питона. Вы не обновляете 2.7 до 3.5, вы загружаете отдельную версию и меняете настройки по умолчанию.
Как сказал @William в своем ответе, Apple не предоставляет bash 4 из-за ограничений GPL. Однако вы можете установить bash 4+, а также сделать его оболочкой по умолчанию (в том числе для Terminal и iTerm2 ), выполнив следующие действия.
Установите Bash 4 через Homebrew
Сначала установите более новую версию bash. Есть разные способы сделать это, я предпочитаю Homebrew.
- Установите Homebrew, как описано на http://brew.sh .
- Установите bash, используя brew install bash .
Bash 4 теперь доступен в вашей переменной PATH (при условии, что на вашем пути находится корзина с домашним пивом). Тем не менее, это еще не ваша оболочка по умолчанию. Вы можете найти, где он находится, запустив which bash . В моем случае это на /usr/local/bin/bash .
Использование Bash 4
Поскольку он находится в вашем PATH, вы можете начать сеанс Bash 4 с помощью just bash или его можно использовать в сценариях с помощью Shebang .
Например, это будет использовать конкретный экземпляр bash.
Это будет использовать первый удар по PATH.
Вы также можете установить путь bash для определенных профилей в Terminal / iTerm2, используя шаги, описанные в ответе @ user136952.
Делаем Bash 4 по умолчанию
Как уже упоминалось выше, после установки Bash 4 по-прежнему не является оболочкой по умолчанию. Чтобы сделать bash по умолчанию, вам нужно сделать еще два шага.
Сначала добавьте путь Bash 4 к своему /etc/shells файлу, чтобы он был разрешенной оболочкой для входа. Как описано в / etc / shells , этот файл содержит список допустимых оболочек для входа. После добавления нового пути bash мой /etc/shells выглядит следующим образом:
Далее мы используем chsh, чтобы сделать его оболочкой по умолчанию. Поэтому любые сессии для этого пользователя будут использовать эту оболочку. Вы можете прочитать больше об этом в разделе Изменение оболочки в Mac OS X Terminal , но фактическая команда очень проста.
Теперь новый bash является нашей оболочкой входа по умолчанию. Если вы откроете Terminal или iTerm2 и запустите, bash —version вы должны увидеть новую версию. Обратите внимание на «Лицензию GPLv3 +», поэтому Apple не связывает ее с MacOS.
Источник
Install Bash 5 on macOS
The default bash on macOS is still bash v3:
Just recently, bash v5 was released. The discrepancy comes from the fact that bash has been licensed as GPL v3 since version 4. Apple does not include GPL v3 licensed tools with macOS.
However, nothing is keeping you from downloading and installing the latest bash version.
New features include, among many other things, associated arrays (i.e. dictionaries) and better auto-completion setup.
While you would think this is a common desire, most pages I have found will simply point to Homebrew to download and install a newer bash version.
The main challenge with using brew is that it does not work on the scale that MacAdmins require. brew is designed for single user installation, where the user has administrator privileges. brew ’s workflows do not scale to large deployments controlled with a management system.
Ideally, there would be package installer for the latest bash version. Unfortunately, the bash project does not provide one.
In this post, I will show how you can install the latest bash version without brew and how to build an installer package for deployment.
Manual Installation
This requires Xcode or the Developer Command Line Tools to be installed.
First, download the source for the latest bash version from this page. As of this writing the latest version is bash-5.0 and the file you want is bash-5.0.tar.gz . Once downloaded, you can expand the archive in Finder by double-clicking.
Open a Terminal window and change directory to the newly expanded bash-5.0 directory. Then run the configure script there.
The configure process will take a while, there will be plenty of messages showing progress.
Once the configure process is complete. You can build bash with the make command.
This will build the bash binary and the supporting files in the current directory. That’s not where we want it in the end, but it is probably a good idea see if the build process works. This will (again) take a while. There will be some odd looking warnings, but you can ignore those.
When make succeeds, you can actually install bash v5 with
This will build and install the bash binary and supporting files in /usr/local/bin and /usr/local . sudo is required to modify /usr/local .
If you were just looking for a way to install bash v5 without brew , you are done!
There is more useful information in the rest of the post, though, so keep reading!
How the new and the old bash interact
By default, the bash v5 binary is called bash and will be installed in /usr/local/bin . The macOS default PATH lists /usr/local/bin before /bin where the default bash v3 binary, also called bash , is located.
This means, that when a user types bash in to a shell, the version in /usr/local/bin will be preferred over the pre-installed bash v3.
You can test this behavior in Terminal. Since the default shell has not yet been changed from /bin/bash the Terminal still opens to bash v3. You can test this by showing the BASH_VERSION environment variable:
But when you then run bash it will invoke /usr/local/bin/bash , so it will run the new bash v5. It will show this in the prompt, but you can also verify the BASH_VERSION .
This might be the setup you want, when you want to use bash v5 always. It might lead to some unexpected behavior for some users, though.
One option to avoid this ambiguity is to rename the binary in /usr/local/bin to bash5 . But then other tools such as env (mentioned below) will not find the binary any more.
Note: the PATH in other contexts will likely not contain /usr/local/bin and further confuse matters.
bash v5 and Scripting
Scripts using bash , should have the full path to the binary in the shebang. This way, the script author can control whether a script is executed by the default bash v3 ( /bin/bash ) or the newer bash v5 ( /usr/local/bin/bash or /usr/local/bin/bash5 ).
It is often recommended to use the env command in the shebang:
The env command will determine the path to the bash binary in the current environment. (i.e. using the current PATH ) This is useful when the script has to run in various environments where the location of the bash binary is unknown, in other words across multiple Unix and Unix-like platforms. However, this renders the actual version of bash that will interpret the script unpredictable.
For example, assume you have bash v5 installed in the default configuration (as /usr/local/bin/bash . A script with the shebang #!/usr/bin/env bash launched in the user environment (i.e. from Terminal) will use the newer bash , as /usr/local/bin comes before /bin in the search order.
When you launch the same script in a different context, e.g. as an installation script, an AppleScript, or a management system, /usr/local/bin will likely not be part of the PATH in that environment. Then the env shebang will choose /bin/bash (v3). The script will be interpreted and might behave differently.
Administrators prefer certainty in their managed environments. Administrators should know the location and versions of the binaries on their systems. For management scripts, you should avoid env and use the proper full path to the desired interpreter binary.
The solutions to resolve the ambiguity are
- use the full path to the binary in the shebang
- manage and update the additional custom version of bash with a management system
- (optional) rename the newer bash binary to bash5 or bash4 (this also allows you to have bash v4 and bash v5 available on the same system)
- Scripting OS X: On the Shebang
- Scripting OS X: Setting the PATH in Scripts
Changing a user’s default Shell to bash v5
Even though we have installed bash v5, the default shell of a new Terminal window will still use the built-in bash v3.
The path to the default shell is stored in the user record. You can directly change the UserShell attribute with dscl , in the ‘Advanced Options’ of the ‘Users & Groups’ preference pane, or in Directory Utility.
There is also a command to set the default shell:
The chsh (change shell) command will check for allowed shells in the /etc/shells file. You can easily append a line with /usr/local/bin/bash to this file, and then chsh will work fine.
Note: if you choose to rename the bash binary, you have to use the changed name in /etc/shells and with chsh .
Remember that just running chsh will not change the shell in the current Terminal window. It is best to close the old Terminal window and open a new one to get the new shell.
Packaging bash v5 for mass deployment
While these steps to install and configure bash v5 on a single Mac are simple enough, they would not work well with a management system for hundreds or thousands of Macs. We want to wrap all the files that make install creates into a package installer payload.
The —help option of the configure script yields this useful information:
By default, make install’ will install all the files in /usr/local/bin , /usr/local/lib etc. You can specify an installation prefix other than /usr/local using –prefix , for instance –prefix=$HOME`.
When we run the configure script with the —prefix option it creates a folder suitable as a payload for a package installer. We can then use pkgbuild to build to create an installer pkg:
(Note: the —prefix argument requires an absolute path.)
Automate the package creation
So, we have our workflow for building an installer package to distribute and configure bash v5:
- download the archive
- extract the archive
- run configure with the —prefix argument
- run make install to create the files in a payload folder
- optional: rename the resulting bash binary to bash5 to avoid conflicts
- add a postinstall script that adds /usr/local/bin/bash[5] to /etc/shells if not yet present
- build the installer with pkgbuild
This sounds like a workflow ripe for automation. You can get the script from this repository.
You can pass a different (valid) bash version number as an argument to the script, e.g. 4.4.18 . (I did not test anything significantly older.) The script does not autodetect the latest version and defaults to version 5.0 when no argument is given. When an update to bash v5 is published, you will have to modify the version line or run the script with an argument.
I have not (yet) figured out how to detect the latest version from the download web page. An autopkg recipe will have to wait for that. (If someone else wants to tackle that, please do!)
Related
20 thoughts on “Install Bash 5 on macOS”
Greetings, just ran across your post, the latest version of bash can be found with this (on MacOS using curl, no wget by default). Here’s to hoping that all the tics, slashes, quotes, etc are faithfully reproduced in the command below:
Источник