Apakah aman untuk meningkatkan versi Bash melalui Homebrew?

81

Saya baru mengenal OS X. Saya menjalankan OS X Lion di MacBook Pro. Apakah aman untuk memutakhirkan bash shell menggunakan Homebrew:

$ brew install bash

Jika aman, bagaimana cara menjadikannya contoh default dari shell yang saya jalankan melalui Terminal?

Terima kasih!

Rudy
sumber
2
Pertanyaan ini tiba-tiba menjadi sangat relevan, lihat
Shellshock
Iya. 10 karakter
shrx

Jawaban:

105

Binari di /{,usr/}{,s}bin/biasanya tidak diganti dengan file lain. Program lain mengharapkan mereka menjadi versi yang datang dengan OS X, dan mereka digantikan oleh peningkatan OS.

Setelah berjalan brew install bash, Anda dapat mengubah shell default dengan aman dengan:

  • menambahkan /usr/local/bin/bashke/etc/shells
  • Lari chsh -s /usr/local/bin/bash.

Pengaturan di Terminal atau iTerm 2 biasanya tidak perlu diubah. Keduanya default untuk membuka windows baru dengan shell login dari shell default.

Shell default juga dapat diubah dari System Preferences atau dengan dscl, tetapi ketiga opsi hanya memodifikasi /var/db/dslocal/nodes/Default/users/$USER.plist.

Daniel
sumber
Sepertinya itu berhasil, dan jika saya mengalami masalah apa pun seharusnya mudah untuk memutar kembali! Terima kasih!
Rudy
tidak tahu bahwa halaman opsi lanjutan ada di sana. Manis!
lemonginger
2
/etc/shellsDibutuhkan sedikit pengeditan untuk memasukkan bash yang diinstal buatan. Kalau tidak (setidaknya pada mesin saya) Terminal akan menolak untuk memulai.
brendanjerwin
2
Perintah ketiga (csh -s) tampaknya tidak lagi diperlukan pada Mavericks 10.9.2.
Brent Faust
2
Saya hanya perlu brew install bashini untuk bekerja. (Yaitu tidak harus memodifikasi /etc/shells)
Daniel
4

Saya bisa saja salah di sini, tetapi sejauh yang saya tahu brewakan menginstalnya sendiri bash, karena minuman bekerja di bawah /usr/local/binsedangkan sistem default bekerja di bawah /bin(dan /usr/bin).

Tentang Terminal, Anda dapat membuat shell terbuka dengan perintah kustom Anda sendiri. Pergi ke Preferensi> Startup dan pilih Kerang terbuka dengan: Perintah (path lengkap) . Cukup ketikkan jalur ke bashvuala baru dan Anda!

Semoga ini bisa membantu!

BTW: Cadangkan! Saran terbaik dalam situasi ini!

kevin9794
sumber
hei, Anda tahu, jawaban ini benar-benar berfungsi seperti pesona
castiel
0

Baik sebelum Anda melakukan apa pun, buat cadangan file Anda saat ini (tentu saja, tetapi selalu layak untuk dikatakan)

sudo cp /bin/bash /bin/bash.3.2.bk

Kemudian buat symlink ke bash executable yang diunduh oleh Homebrew. Saya pikir ini akan berada di / usr / local / Cellar, seperti itu

sudo ln -s /usr/local/Cellar/bash/4.2.10/bin/bash /bin/bash

Sekarang / bin / bash menunjuk ke file di direktori usr / local Anda

serai
sumber
3
Kelemahan dari memasang bash baru untuk versi sistem adalah setiap pembaruan OS dapat menghapus shell pilihan Anda. Agaknya OP ingin menggunakan fitur-fitur baru yang dapat rusak jika OS menginstal versi "lebih baru dari OS lama" tetapi "lebih tua dari kustom". Lebih baik mengubah jalur default atau mengubah variabel shell pengguna.
bmike
baik, Anda bisa membuat simlink baru karena itu tidak akan menimpa versi bash di direktori usr / local Anda. tetapi Anda benar, cara Daniel lebih baik
lemonginger
Ooh - edit jawaban Anda, mohon untuk menempatkan yang pertama (dan pertahankan ide orisinal jika Anda lebih suka sebagai alternatif kedua - saya suka itu jauh lebih baik dan akan senang sekali kesempatan untuk membalikkan suara saya :-)
bmike
1
hmm, memang itu yang saya katakan, tapi saya edit untuk mencoba menjelaskan apa yang dilakukan setiap langkah sedikit lebih baik. Tetap berpikir jawaban berperingkat teratas adalah prob lebih baik :)
lemonginger
Ini sepertinya cara yang cukup berbahaya untuk mengubah shell sistem.
Samuel Mikel Bowles
0

Saya pikir aman jika Anda baru saja meluncurkan

brew install bash

dan kemudian menambahkannya sebagai shell default Anda

chsh -s /usr/local/bin/bash

karena Anda hanya memodifikasi pengguna Anda saat ini. Namun, saya melihat bahwa saya bawaan ~ / .profile adalah

if [ "/bin/bash" == $BASH ]; then
    source ~/.bashrc
fi

jadi itu perlu diperbarui. Saya mengubahnya menjadi

if [ "bash" == $(basename $BASH) ]; then
        source ~/.bashrc
fi
Gianluca Casati
sumber
Lihat jawaban lain mengapa chshsendirian saja tidak cukup. Juga cuplikan .profile Anda yang diperbarui terlihat identik dengan yang asli
nohillside
@ patrix: terima kasih untuk menunjukkannya, saya memperbarui potongan kedua. Alangkah baiknya jika brew install bashtidak membutuhkan tindakan lebih lanjut. Dengan profil yang diperbarui yang saya bagikan, tidak. Saya harap ini bisa membantu orang lain.
Gianluca Casati