如何在Mac OS X Yosemite上更新bash


25

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

Bash version 3.2.53(1)-release...

我已经用自制软件在Mac OS X优胜美地上更新了bash:

brew update
brew install bash

然后在终端属性中,我将标准外壳程序路径从更改/bin/bash/usr/local/bin/bash(据我所知,这是自制软件安装更新的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版本会变回旧版本???这简直吓到我了!请有人向我解释我的问题)))

Answers:


17

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

#!/bin/bash

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

#!/usr/local/bin/bash

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


很奇怪的事情,但是实际上没有用。仍然是相同的结果(((((但我确定这是问题的一部分
Drew

我是否需要在其他地方指定此路径?在一些shell文件或什么?
Drew

1
也许环境是由调用shell(即旧的Bash)设置的?您究竟如何称呼自己的脚本@Andrew?
slhck 2014年

1
@安德鲁,我怀疑你sh/binbrew也许没有做一个符号链接bashsh$PATH正确设置您的设置后,尝试像这样启动它:bash script.sh
BenjiWiebe 2014年

8
供将来参考,您可能应该使用#!/usr/bin/env bash
pjvandehaar 2015年

15

安装新的bash:

brew install bash

将其设置为默认外壳:

chsh -s /usr/local/bin/bash

在脚本中设置环境:

#!/usr/bin/env bash

使用env将在您的计算机中查找Bash $PATH并使用它遇到的第一个。您可以bash通过键入来查看将使用的内容which bash。如果是/bin/bash第一次看到,则需要$PATH~/.bashrc和中进行设置/.bash_profile


2
如果在使用时看到打印出“非标准外壳” chsh,则需要更新/ etc / shells
Scott Willeke

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.