Bagaimana membuat zsh dijalankan sebagai shell login di Mac OS X (di iTerm)?

149

Ketika zsh ditetapkan sebagai shell login pada Mac OS X, ketika dimulai oleh iTerm, zsh tidak menganggap itu dijalankan sebagai shell login, meskipun itu dimulai sebagai '-zsh' ('-' diletakkan sebagai karakter pertama dari arg [0]) yang seharusnya berarti ia harus mulai sebagai shell login.

Jadi, ketika saya mengatur shell login ke bash, bash mengenali ini '-' pertama kali dalam $ 0 dan berjalan sebagai shell login, tetapi zsh tidak, meskipun tampaknya memang seharusnya demikian.

Apakah ada cara untuk membuat zsh mengenali '-' di arg [0], atau membuat iTerm menjalankan shell dengan argumen baris perintah --login?

Ivan Tarasov
sumber
2
Saya tahu ini sudah lama sejak pertanyaan ini diajukan, tapi tolong pertimbangkan menerima jawaban @Harold Putman Ini satu-satunya yang menjawab pertanyaan yang diajukan.
Craig S. Cottingham

Jawaban:

106

Di iTerm -> Preferensi -> Tab Profil -> Bagian Umum atur Perintah ke: / bin / zsh --login

/ bin / zsh --login

Harold Putman
sumber
1
iterm2 tampaknya tidak memiliki opsi ini di tab General. Adakah cara untuk mencapainya di iterm2 tanpa mengubah shell login?
Lloyd Dewolf
6
Ini tab umum pada Tab Profil.
Harold Putman
Aha! Itu membingungkan bahwa ada Tab Umum dan Profil> Umum.
Lloyd Dewolf
2
atau dalam kasus saya/usr/local/bin/zsh --login
Yar
Saya menggunakan ini untuk mengubah shell saya daripada mengedit / etc / shells karena ini seharusnya mencegah masalah dengan shell saya menjadi tidak dapat digunakan setelah pembaruan.
sal
220
chsh -s $(which zsh)

Anda akan dimintai kata sandi, tetapi begitu Anda memperbarui pengaturan, setiap sesi iTerm / Terminal baru yang Anda mulai di mesin itu akan default ke zsh.

Damien Wilson
sumber
2
Tolong, baca pertanyaannya terlebih dahulu. Masalahnya bukan dalam pengaturan shell default, masalahnya adalah zsh tidak mendeteksi bahwa itu dimulai sebagai shell login.
Ivan Tarasov
1
Ah, permintaan maaf saya. Sudahkah Anda mencoba menggunakan flag -i untuk memaksa zsh memulai dalam mode interaktif?
Damien Wilson
11
Jawabannya memang membuat zsh dijalankan sebagai shell login pada Mac OS X di iTerm. Ini tidak berarti melakukan seperti yang Anda gambarkan. Tapi itu memecahkan masalah yang Anda tanyakan (dalam judul, bukan di tubuh) menyajikan. Pertanyaan yang Anda akhiri di tubuh adalah pertanyaan yang sama sekali berbeda. Jika itu pertanyaan Anda yang sebenarnya (daripada bagaimana membuat zsh dijalankan sebagai shell login) maka mungkin Anda harus menulis ulang pertanyaan dalam judul.
iconoclast
45
Jika chshmemberi tahu Anda sesuatu seperti "shell tidak standar", itu berarti Anda harus menambahkan path shell baru /etc/shells. Ini bisa terjadi jika Anda mengubah, misalnya, ke versi zsh yang diinstal oleh homebrew, yang memasukkannya ke dalam /usr/local/bin/zsh.
shovavnik
1
chsh -s $(which zsh)dapat digunakan untuk memastikan jalur yang benar.
Daniel Doezema
56

Buka panel Pengguna & Grup pada System Preferences -> Pilih Pengguna -> Klik kunci untuk melakukan perubahan (sudut kiri bawah) -> klik kanan pengguna saat ini pilih Opsi lanjutan ... -> Pilih Shell Login: / bin / zsh dan OK

Arunkumar
sumber
3
Ini menyelamatkan hari saya. Saya menggunakan osx mavericks.
qed
Ini berfungsi untuk zsh default bukan untuk yang diinstal oleh minuman.
Imam Bux
19

Perintah untuk mengganti shell saat startup adalah chsh -s <path_to_shell>. Kerang default di mac OS X diinstal di dalam bindirektori jadi jika Anda ingin mengubah ke default zshmaka Anda akan menggunakan yang berikut ini

chsh -s /bin/zsh

Jika Anda menggunakan versi berbeda zshmaka Anda mungkin harus menambahkan versi itu /etc/shellsuntuk menghindari pesan shell yang tidak standar. Misalnya jika Anda ingin versi home-brew zshmaka Anda harus menambahkan /usr/local/bin/zshke file yang disebutkan di atas yang dapat Anda lakukan dalam satu perintah sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"dan kemudian jalankan

chsh -s /usr/local/bin/zsh

Atau jika Anda ingin melakukan semuanya dalam satu perintah, cukup salin dan tempel ini jika Anda sudah menginstal zsh

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh
hasanain
sumber
2
Saya pikir tidak adil untuk meremehkan jawaban ini. Alat peraga seperti itu adalah satu-satunya yang menyebutkan /etc/shellsdalam tubuh jawaban itu sendiri.
heymatthew
1
@heymatthew alasan itu sedang downvoted adalah karena tidak menjawab pertanyaan yang diajukan. Itu menjawab pertanyaan yang sama sekali berbeda.
Tabitha
17

Sudahkah Anda mencoba mengedit entri shell di pengaturan akun .

Buka preferensi Akun, buka kunci, dan klik kanan pada akun pengguna Anda untuk dialog Pengaturan Lanjutan . Shell Anda harus / bin / zsh, dan Anda dapat mengedit permohonan itu dengan benar (yaitu, tambahkan argumen --login).

Brian Agnew
sumber
Sayangnya, itu tidak berfungsi: Saya dapat mengatur shell mana saja yang saya suka menggunakan chsh (selama saya memiliki shell ini terdaftar di / etc / shells), namun seseorang tidak dapat menambahkan argumen baris perintah ke shell dialog Preferensi Lanjutan (iTerm gagal untuk memulai shell up).
Ivan Tarasov
Beberapa sintaks telah berubah di OS X tetapi intinya adalah untuk mengatur shell default Anda menjadi / bin / zsh seperti yang ditunjukkan Brian di atas
engineerDave
7
Saya suka SO. Saya telah menggunakan jawaban ini sekarang, dan baru kemudian menyadari saya menulisnya hampir 4 tahun yang lalu!
Brian Agnew
-2

Gunakan loginutilitas untuk membuat shell login. Asumsikan bahwa pengguna yang ingin Anda masuki memiliki nama pengguna Alice dan zsh diinstal /opt/local/bin/zsh(misalnya, versi yang lebih baru diinstal melalui MacPorts). Di iTerm 2, buka Preferensi, Profil, pilih profil yang ingin Anda atur, dan masukkan di Command :

login -pfq Alice /opt/local/bin/zsh

Lihat man loginuntuk detail lebih lanjut tentang opsi.

Robin Klose
sumber
Ini 100% bukan jawaban. Ya akan mengubah shell mana yang Anda buat secara default, tetapi itu bukan jawaban tentang cara membuat instance "login" dari shell, yaitu sumber semua variabel dari awal.
Tabitha