如何在 Mac OS X Yosemite 上更新 bash

Dre*_*rew 26 bash shell shell-script bash-scripting macos

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

Bash version 3.2.53(1)-release...
Run Code Online (Sandbox Code Playgroud)

我已经用自制软件在 mac os x yosemite 上更新了我的 bash:

brew update
brew install bash
Run Code Online (Sandbox Code Playgroud)

然后在终端属性中,我将标准 shell 路径从 更改/bin/bash/usr/local/bin/bash(据我所知,这是自制软件安装更新后的 bash 的地方)。

然后我再次检查了结果(似乎一切都很好):

$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "Welcome $i times"
 done
Run Code Online (Sandbox Code Playgroud)

结果是:

Bash version 3.2.53(1)-release...
Welcome {0..10..2} times
Run Code Online (Sandbox Code Playgroud)

代替:

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
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*ebe 16

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

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

它明确指出应该使用旧的/bin/bash. 你真正想要的是:

#!/usr/local/bin/bash
Run Code Online (Sandbox Code Playgroud)

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

  • 为了将来参考,您可能应该使用`#!/usr/bin/env bash` (11认同)

小智 16

安装新的 bash:

brew install bash
Run Code Online (Sandbox Code Playgroud)

将其设为默认 shell:

chsh -s /usr/local/bin/bash
Run Code Online (Sandbox Code Playgroud)

在脚本中设置环境:

#!/usr/bin/env bash
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您在使用 `chsh` 时看到打印出“非标准 shell”,则需要 [更新 /etc/shells](http://stackoverflow.com/questions/453236/how-to-set-my-default -shell-on-mac#26321141)。 (3认同)

Ago*_*ath 7

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

#!/usr/bin/env bash
Run Code Online (Sandbox Code Playgroud)

在您的脚本中随处可移植。例如,如果您尝试使用以下命令运行脚本

#!/usr/local/bin/bash
Run Code Online (Sandbox Code Playgroud)

它会在大多数 linux 系统上失败。