web-dev-qa-db-ja.com

Mac OS X Yosemiteでbashを更新する方法

少しだけ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

同じシェルでスクリプトを実行しようとすると、Bashのバージョンが古いバージョンに戻るのはなぜですか?これはただ私をビックリさせます!誰かが私に何が問題なのか説明してください)))

25
Drew

あなたの問題は最初の行にあります。あなたはこれを持っています:

#!/bin/bash

これは、シェルスクリプトを古い/bin/bashで実行する必要があることを明示的に示しています。あなたが本当に欲しいものは、これです:

#!/usr/local/bin/bash

/usr/local/binの新しいbashを使用します。

17
BenjiWiebe

新しいbashをインストールします。

brew install bash

これをデフォルトのシェルにします。

chsh -s /usr/local/bin/bash

スクリプトで環境を設定します。

#!/usr/bin/env bash

envを使用すると、$PATHでBashが検索され、最初に見つかったものが使用されます。 which bashと入力すると、使用するbashを確認できます。最初に/bin/bashが表示される場合は、$PATH~/.bashrc/.bash_profileを設定する必要があります。

15
Ben

Pjvが指摘したように、実際に使用する必要があります

#!/usr/bin/env bash

あなたのスクリプトのどこでも移植可能です。例えば。あなたがあなたのスクリプトを実行しようとした場合

#!/usr/local/bin/bash

ほとんどのLinuxシステムでは失敗します。

7
Agoston Horvath