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
.
小智 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
首先看到,您将需要设置您的$PATH
in~/.bashrc
和/.bash_profile
。
正如 pjv 指出的,你真的应该使用
#!/usr/bin/env bash
Run Code Online (Sandbox Code Playgroud)
在您的脚本中随处可移植。例如,如果您尝试使用以下命令运行脚本
#!/usr/local/bin/bash
Run Code Online (Sandbox Code Playgroud)
它会在大多数 linux 系统上失败。
归档时间: |
|
查看次数: |
17776 次 |
最近记录: |