如何在 Mac OS X Yosemite 上更新 bash

如何在 Mac OS X Yosemite 上更新 bash

只是想学习一点 bash 脚本。我的旧 bash 版本:

Bash version 3.2.53(1)-release...

我已经使用 homebrew 更新了 mac os x yosemite 上的 bash:

brew update
brew install bash

然后在终端属性中,我将标准 shell 路径从 更改为/bin/bash/usr/local/bin/bash据我了解,这是 homebrew 安装更新的 bash 的地方)。

然后我再次检查了结果(看起来一切都很好):

$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...

但是当我尝试编写一个简单的 bash 脚本时:

#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "Welcome $i times"
 done

结果是:

Bash version 3.2.53(1)-release...
Welcome {0..10..2} times

代替:

Bash version 4.0.33(0)-release...
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times

为什么当我尝试在同一个 shell 中执行脚本时,Bash 版本会变回旧版本???这让我很害怕!请有人解释一下我的问题是什么)))

答案1

你的问题在第一行。你有这样的:

#!/bin/bash

它明确指出 shell 脚本应该与旧的一起运行/bin/bash真的想要的是这个:

#!/usr/local/bin/bash

使用新的bash来自/usr/local/bin

答案2

安装新的 bash:

brew install bash

将其设为默认 shell:

chsh -s /usr/local/bin/bash

在脚本中设置环境:

#!/usr/bin/env bash

使用env将在您的 Bash 中查找$PATH并使用它遇到的第一个。您可以bash通过输入来查看它将使用哪一个which bash。如果它首先看到/bin/bash,您将需要$PATH~/.bashrc和中设置您的/.bash_profile

答案3

正如 pjv 指出的那样,你真的应该使用

#!/usr/bin/env bash

在你的脚本中随处可见,以便于移植。例如,如果你尝试使用

#!/usr/local/bin/bash

它将在大多数 Linux 系统上失败。

相关内容