少しだけ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のバージョンが古いバージョンに戻るのはなぜですか?これはただ私をビックリさせます!誰かが私に何が問題なのか説明してください)))
あなたの問題は最初の行にあります。あなたはこれを持っています:
#!/bin/bash
これは、シェルスクリプトを古い/bin/bash
で実行する必要があることを明示的に示しています。あなたが本当に欲しいものは、これです:
#!/usr/local/bin/bash
/usr/local/bin
の新しいbash
を使用します。
新しい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
を設定する必要があります。
Pjvが指摘したように、実際に使用する必要があります
#!/usr/bin/env bash
あなたのスクリプトのどこでも移植可能です。例えば。あなたがあなたのスクリプトを実行しようとした場合
#!/usr/local/bin/bash
ほとんどのLinuxシステムでは失敗します。