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


25

bashスクリプトを少し学習しようとしています。私の古いbashバージョン:

Bash version 3.2.53(1)-release...

Mac OS X Yosemiteのbashをhomebrewで更新しました:

brew update
brew install bash

次に、ターミナルのプロパティで、標準のシェルパスをから/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

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

回答:


17

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

#!/bin/bash

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

#!/usr/local/bin/bash

新しいを使用するbashから/usr/local/bin


奇妙なことですが、実際には機能しませんでした。それでも同じ結果(((しかし、私は、これは問題の一部であると確信している
ドリュー

このパスを別の場所に指定する必要がありますか?いくつかのシェルファイルまたは何か?
ドリュー

1
環境は呼び出しシェル、つまり古いBashによって設定されているのでしょうか?@Andrewのスクリプトをどのくらい正確に呼んでいますか?
slhck 14

1
@Andrew、あなたshはにいると思う/binbrew以下のためかもしれないシンボリックリンクをしなかったbashと呼ばれますsh$PATHセットを正しく設定したら、次のように起動してみてくださいbash script.sh
BenjiWiebe 14

8
将来の参照のために、おそらく使用する必要があります#!/usr/bin/env bash
-pjvandehaar

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更新する必要があります。
スコットウィレケ

6

pjvが指摘したように、あなたは本当に使うべきです

#!/usr/bin/env bash

どこでもスクリプトで移植可能です。たとえば、スクリプトを実行しようとすると

#!/usr/local/bin/bash

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.