chsh tidak mengubah $ SHELL

9

Saya mengalami beberapa kesulitan dalam mengubah nilai $SHELLdi aplikasi iTerm OSX. ITerm mulai /bin/zsh, tetapi nilai $SHELLtampaknya tidak berubah.

Apa yang telah kulakukan:

  1. Mengubah "perintah" seperti /bin/zshpada jendela konfigurasi iTerm.
  2. Dieksekusi chshuntuk mengubah shell ke /bin/zsh.
  3. ITerm yang dikonfirmasi dimulai pada /bin/zsh

CATATAN # 1: Dalam aplikasi terminal saham OSX, "Terminal.app":

echo $SHELL
/bin/zsh

CATATAN # 2: Dalam aplikasi terminal OSX yang populer, "iTerm.app":

$ echo $SHELL
/bin/bash

$ echo $USER
$ melvkim

$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made
melvynkim
sumber
1
Apakah kamu sudah melihat /etc/shells? Manual menyatakan bahwa jika shell yang Anda tentukan tidak ada dalam file itu, itu tidak dianggap sebagai shell standar.
Bob Dalgleish

Jawaban:

5

Masalahnya adalah pengaturan yang bertentangan aplikasi "iTerm" dengan shell. Untuk menyelesaikannya, saya telah mereset perintah "login shell" di jendela preferensi iTerm:

iTerm.app -> Preferensi -> Profil -> Umum -> Perintah -> Klik pada "Login shell"

Kemudian, saya mengeksekusi chshuntuk memodifikasinya sebagai /bin/zsh.

Untuk mereproduksi masalah (memiliki $ SHELL ditetapkan sebagai /bin/bash/, meskipun shell login adalah /bin/zsh), saya hanya perlu mengubah pengaturan "iTerm" kembali ke "Command: / bin / zsh /".

melvynkim
sumber
1

The -sbendera untuk chshhanya upaya untuk mengubah shell, dan mungkin gagal karena Open Directory: The biasa UNIX sistem 'chsh' akan memodifikasi /etc/passwdentri. Namun, saya dapat menjalankan chshtanpa argumen, yang memberi saya editor, dan informasi berikut:

# Changing user information for nevin.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/tcsh
Full Name: Nevin Williams
Office Location:
Office Phone:
Home Phone:

Saya dapat mengedit entri "Shell:" /bin/zsh, dan jendela Terminal selanjutnya dibuka dengan prompt Z-shell.

Nevin Williams
sumber
Saya mencoba chshtanpa argumen. Masih belum berhasil. Variabel tidak berubah. Bahkan, ketika editor dimuat, itu terlihat /bin/zsh.
melvynkim
Coba ganti shell dengan editor. Saya membuat tangkapan layar saya berubah dari / bin / tcsh ke / bin / zsh dan kembali. bonmot.ca/~nevin/chsh.mov
Nevin Williams
Terima kasih banyak telah meluangkan waktu Anda merekam memposting screencast Anda! Solusi Anda seharusnya bekerja pada emulator terminal lain, tetapi saya tidak dapat mengubah $SHELLpada ITerm. Silakan lihat jawaban saya untuk detail .. Terima kasih!
melvynkim
1

Lihat di sini untuk penjelasan yang sangat baik dan solusi yang diposting oleh @ mklement0 [sehubungan dengan bashmasalah pemutakhiran.

Saya memiliki masalah yang sama dalam melakukan hal yang sebaliknya pada sistem saya (OS X 10.10.1): membuat bashshell login default lagi setelah saya menginstal oh-my-zsh, yang membuat zshdefault, dan kemudian memutakhirkan bashdari 3.2.53 ke 4.3.30 menggunakan Homebrew ( mengapa Apple mengirim Yosemite dengan bashversi lama ?).

Saya pikir SHELLvariabel lingkungan mencerminkan tetapi tidak mengontrol shell login default aktual untuk pengguna. Misalnya, jika, katakanlah, bashadalah default Anda dan Anda membuka bashjendela shell baru dari terminal maka $ export SHELL="/bin/zsh"; echo "$SHELL"akan muncul /bin/zshtetapi tidak ada perubahan yang sebenarnya akan terjadi karena jika Anda membuka jendela shell baru dari terminal dan lakukan $ echo $0maka Anda akan melihat -bash( $0berisi 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 UserShellproperti 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/zshdilakukan adalah mengubah UserShellproperti ini untuk mengaturnya zsh- Anda dapat memeriksanya dengan dscl . -read /Users/$USER/ UserShellsegera setelahnya, dan Anda akan melihatnya UserShell: /bin/zsh. Tetapi perubahan tidak berpengaruh pada jendela saat ini, sampai Anda melakukan sesuatu seperti yang exec su - $USERdisarankan oleh @ mklement0, atau sampai Anda menutup dan membuka jendela shell.

ramius
sumber
0

Coba jalankan perintah: chsh -s /bin/zshdari terminal Mac default.

mohitmayank
sumber
1
Apa bedanya dengan OP?
JMY1000
@ JMY1000 Jika Anda mencoba menjalankan perintah itu dari iTerm, perubahannya tidak tercermin. Anda harus dapat membuatnya bekerja dengan mengeksekusinya dari terminal default Mac.
mohitmayank