Cara memperbarui bash di Mac OS X Yosemite

25

Hanya mencoba belajar bash scripting sedikit. Versi bash lama saya:

Bash version 3.2.53(1)-release...

Saya telah memperbarui bash saya di mac os x yosemite dengan homebrew:

brew update
brew install bash

Kemudian di properti terminal saya telah mengubah path shell standar dari /bin/bashke /usr/local/bin/bash(Seperti yang saya mengerti ini adalah di mana homebrew menginstal bash yang diperbarui).

Lalu saya memeriksa hasilnya lagi (dan sepertinya semuanya baik-baik saja):

$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...

Tetapi ketika saya mencoba menulis skrip bash sederhana:

#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "Welcome $i times"
 done

HASILNYA ADALAH:

Bash version 3.2.53(1)-release...
Welcome {0..10..2} times

DARI PADA:

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

Mengapa versi Bash berubah kembali menjadi yang lama ketika saya mencoba menjalankan skrip di shell yang sama ??? Ini hanya membuatku takut! Tolong seseorang jelaskan apa masalah saya)))

Drew
sumber

Jawaban:

17

Masalah Anda ada di baris pertama Anda. Kamu punya ini:

#!/bin/bash

yang secara eksplisit menyatakan bahwa skrip shell harus dijalankan dengan yang lama /bin/bash. Apa yang benar - benar Anda inginkan, adalah ini:

#!/usr/local/bin/bash

untuk menggunakan yang baru bashdari /usr/local/bin.

BenjiWiebe
sumber
hal yang aneh, tetapi sebenarnya tidak berhasil. Masih hasil yang sama (((Tapi saya yakin ini adalah bagian dari masalah
Drew
Apakah saya perlu menentukan jalur ini di tempat lain? Dalam beberapa file shell atau sesuatu?
Drew
1
Mungkin lingkungan diatur oleh shell panggilan, yaitu Bash lama? Bagaimana tepatnya Anda memanggil skrip Anda, @Andrew?
slhck
1
@Andrew, saya curiga Anda shada di /bin. brewmungkin tidak membuat symlink untuk bashdipanggil sh. Dengan Anda $PATHset dengan benar, coba mulai seperti ini: bash script.sh.
BenjiWiebe
8
Untuk referensi di masa mendatang, Anda mungkin harus menggunakan#!/usr/bin/env bash
pjvandehaar
15

Pasang bash baru:

brew install bash

Jadikan ini shell default:

chsh -s /usr/local/bin/bash

Atur lingkungan dalam skrip:

#!/usr/bin/env bash

Menggunakan envakan mencari Bash di Anda $PATHdan menggunakan yang pertama kali ditemui. Anda dapat melihat mana yang bashakan digunakan dengan mengetik which bash. Jika itu melihat /bin/bashpertama, Anda akan perlu untuk mengatur Anda $PATHdi ~/.bashrcdan /.bash_profile.

Ben
sumber
2
Jika Anda melihat "shell non-standar" dicetak saat menggunakan chsh, Anda perlu memperbarui / etc / shells .
Scott Willeke
6

Seperti yang ditunjukkan oleh pjv, Anda harus benar-benar menggunakannya

#!/usr/bin/env bash

di skrip Anda di mana saja untuk menjadi portabel. Misalnya jika Anda mencoba menjalankan skrip Anda

#!/usr/local/bin/bash

itu akan gagal pada kebanyakan sistem linux.

Agoston Horvath
sumber