Lihat di sini untuk penjelasan yang sangat baik dan solusi yang diposting oleh @ mklement0 [sehubungan dengan bash
masalah pemutakhiran.
Saya memiliki masalah yang sama dalam melakukan hal yang sebaliknya pada sistem saya (OS X 10.10.1): membuat bash
shell login default lagi setelah saya menginstal oh-my-zsh
, yang membuat zsh
default, dan kemudian memutakhirkan bash
dari 3.2.53 ke 4.3.30 menggunakan Homebrew ( mengapa Apple mengirim Yosemite dengan bash
versi lama ?).
Saya pikir SHELL
variabel lingkungan mencerminkan tetapi tidak mengontrol shell login default aktual untuk pengguna. Misalnya, jika, katakanlah, bash
adalah default Anda dan Anda membuka bash
jendela shell baru dari terminal maka $ export SHELL="/bin/zsh"; echo "$SHELL"
akan muncul /bin/zsh
tetapi tidak ada perubahan yang sebenarnya akan terjadi karena jika Anda membuka jendela shell baru dari terminal dan lakukan $ echo $0
maka Anda akan melihat -bash
( $0
berisi nama dan path dari perintah yang memulai jendela shell, dalam hal ini bash
, dan di -
sebelahnya menunjukkan bahwa itu adalah shell login).
Seperti @ mklement0 menunjukkan shell login default aktual untuk pengguna dikendalikan oleh UserShell
properti dalam catatan pengguna dalam database internal sistem - ini dapat di-query dan dimutakhirkan menggunakan utilitas baris perintah dscl
. Informasi ini akan diteruskan ke aplikasi terminal Anda ketika Anda membuka jendela shell.
Apa yang chsh -s /bin/zsh
dilakukan adalah mengubah UserShell
properti ini untuk mengaturnya zsh
- Anda dapat memeriksanya dengan dscl . -read /Users/$USER/ UserShell
segera setelahnya, dan Anda akan melihatnya UserShell: /bin/zsh
. Tetapi perubahan tidak berpengaruh pada jendela saat ini, sampai Anda melakukan sesuatu seperti yang exec su - $USER
disarankan oleh @ mklement0, atau sampai Anda menutup dan membuka jendela shell.
/etc/shells
? Manual menyatakan bahwa jika shell yang Anda tentukan tidak ada dalam file itu, itu tidak dianggap sebagai shell standar.