to be
a problem slover

Mac升级最新版bash

概述

Mac 自带的 bash shell 版本为 3.2,2007 年的版本了,原因是 bash 3.2 的授权为 GPLv2,3.2 的下一版本为 4.0,使用 GNU General Public License v3 (GPLv3)授权,苹果不想使用这个授权的 bash,所以一直没升级。

bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
Copyright (C) 2007 Free Software Foundation, Inc.

目前 GNU Bash 的最新版为 5.x 参考(http://ftp.gnu.org/gnu/bash/)。

为什么我会想升级 bash 呢?因为我需要 4.x 以上的版本才可以使用 vscode 的bash debug 插件。对于一些复杂的 bash 脚本,我有 debug 的需求(如何 debug bash 脚本,可以查看我这篇文章使用 vscode 调试 bash 脚本)。

下面介绍如何升级 Mac 的 bash 版本。

安装新版 bash

使用brew安装

brew install bash

查看安装的 bash

$ which -a bash
/bin/bash
/usr/local/bin/bash

安装的新版 bash 在/usr/local/bin/下面,而系统自带的 bash 在/bin下面,所以如果想使用新版的 bash,必须保证在PATH/usr/local/bin 排在 /bin的前面。

调整完成后再次使用which查看,/usr/local/bin排在前面即可。

which -a bash
/usr/local/bin/bash
/bin/bash

设置为默认 shell (可选)

首先需要把新版 bash 路径添加到/etc/shells中,作为系统信任的 shell,即login shell(登录到系统时所使用的 shell)。

/etc/shells最后加上/usr/local/bin/bash

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/bash

然后执行chsh设置默认 shell

sudo chsh -s /usr/local/bin/bash

注意事项

写 bash 脚本的时候,如以下test.sh, 第一行默认写法是#!/bin/bash,显现设置了使用/bin/bash执行脚本。

#!/bin/bash
echo $BASH_VERSION

使用不同的执行方式会有不同的结果

$ bash test.sh
5.0.18(1)-release
$ ./test.sh
3.2.57(1)-release

如果想确保使用新版 bash 执行可以将脚本第一行改为#!/usr/local/bin/bash

参考资料

Upgrading Bash on macOS

赞(3) 打赏
欢迎转载,注明出处:刘世明的博客 » Mac升级最新版bash

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下作者

支付宝扫一扫打赏

微信扫一扫打赏