Làm cách nào để zsh chạy dưới dạng shell đăng nhập trên Mac OS X (trong iTerm)?


149

Khi zsh được đặt làm vỏ đăng nhập trên Mac OS X, khi nó được khởi động bởi iTerm, zsh không xem xét rằng nó đang được chạy như một vỏ đăng nhập, mặc dù nó bắt đầu là '-zsh' ('-' được đặt là ký tự đầu tiên của arg [0]) có nghĩa là nó sẽ bắt đầu như một vỏ đăng nhập.

Vì vậy, khi tôi đặt shell đăng nhập thành bash, bash nhận ra '-' đầu tiên bằng $ 0 và chạy như một vỏ đăng nhập, nhưng zsh thì không, mặc dù có vẻ như vậy.

Có cách nào để làm cho zsh nhận ra '-' trong đối số [0] hoặc làm cho iTerm chạy shell với đối số dòng lệnh --login không?


2
Tôi biết đã được một thời gian kể từ khi điều này được hỏi, nhưng vui lòng xem xét chấp nhận câu trả lời của @Harold Putman. Đây là nơi duy nhất giải quyết câu hỏi.
Craig S. Cottingham

Câu trả lời:


106

Trong iTerm -> Tùy chọn -> Tab Cấu hình -> Phần chung đặt Lệnh thành: / bin / zsh --login

/ bin / zsh --login


1
iterm2 dường như không có tùy chọn này trong tab Chung. Bất kỳ ý tưởng làm thế nào để đạt được trong iterm2 mà không thay đổi vỏ đăng nhập?
Lloyd Dewolf

6
Đó là tab chung trên Tab Profiles.
Harold Putman

Aha! Điều đó gây nhầm lẫn rằng có cả Tab chung và Hồ sơ> Chung.
Lloyd Dewolf

2
hoặc trong trường hợp của tôi/usr/local/bin/zsh --login
Yar

Tôi đang sử dụng điều này để thay đổi shell của mình thay vì chỉnh sửa / etc / shell vì điều này sẽ ngăn vấn đề với shell của tôi trở nên không sử dụng được sau khi cập nhật.
sal

220
chsh -s $(which zsh)

Bạn sẽ được nhắc nhập mật khẩu, nhưng một khi bạn cập nhật cài đặt của mình thì bất kỳ phiên iTerm / Terminal mới nào bạn bắt đầu trên máy đó sẽ mặc định là zsh.


2
Xin vui lòng, đọc câu hỏi đầu tiên. Vấn đề không nằm ở việc thiết lập shell mặc định, vấn đề là zsh không phát hiện ra rằng nó được bắt đầu như một shell đăng nhập.
Ivan Tarasov

1
Ah, lời xin lỗi của tôi. Bạn đã thử sử dụng cờ -i để buộc zsh bắt đầu ở chế độ tương tác chưa?
Damien Wilson

11
Câu trả lời của anh ấy làm cho zsh chạy như một vỏ đăng nhập trên Mac OS X trong iTerm. Nó không thực hiện theo cách bạn mô tả đang cố gắng. Nhưng nó giải quyết vấn đề mà bạn đặt câu hỏi (trong tiêu đề, thay vì trong cơ thể) trình bày. Câu hỏi bạn kết thúc với cơ thể là một câu hỏi hoàn toàn khác. Nếu đó là câu hỏi thực sự của bạn (chứ không phải làm thế nào để zsh chạy dưới dạng vỏ đăng nhập) thì có lẽ bạn nên đặt lại câu hỏi trong tiêu đề.
iconoclast

45
Nếu chshcho bạn biết một cái gì đó như "vỏ không chuẩn", điều đó có nghĩa là bạn phải thêm đường dẫn của vỏ mới /etc/shells. Điều này có thể xảy ra nếu bạn thay đổi, ví dụ, thành phiên bản zsh được cài đặt bởi homebrew, đưa nó vào /usr/local/bin/zsh.
shovavnik

1
chsh -s $(which zsh)có thể được sử dụng để đảm bảo đường dẫn chính xác.
Daniel Doezema

56

Chuyển đến ngăn Người dùng & Nhóm của Tùy chọn hệ thống -> Chọn Người dùng -> Nhấp vào khóa để thực hiện thay đổi (góc dưới bên trái) -> nhấp chuột phải vào người dùng hiện tại chọn Tùy chọn nâng cao ... -> Chọn Shell Đăng nhập: / bin / zsh và OK


3
Điều này đã cứu ngày của tôi. Tôi đang trên mavericks osx.
qed

Điều này hoạt động cho zsh mặc định không phải cho cài đặt bởi brew.
Imam Bux

19

Lệnh thay đổi shell khi khởi động là chsh -s <path_to_shell>. Các shell mặc định trong mac OS X được cài đặt bên trong binthư mục, vì vậy nếu bạn muốn thay đổi thành mặc định zshthì bạn sẽ sử dụng như sau

chsh -s /bin/zsh

Nếu bạn đang sử dụng phiên bản khác nhau zshthì bạn có thể phải thêm phiên bản đó /etc/shellsđể tránh thông báo shell không chuẩn. Ví dụ: nếu bạn muốn phiên bản của nhà pha chế zshthì bạn phải thêm /usr/local/bin/zshvào tệp đã nói ở trên mà bạn có thể thực hiện trong một lệnh sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"và sau đó chạy

chsh -s /usr/local/bin/zsh

Hoặc nếu bạn muốn thực hiện toàn bộ trong một lệnh, chỉ cần sao chép và dán lệnh này nếu bạn đã cài đặt zsh

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh

2
Tôi không nghĩ thật công bằng khi hạ thấp câu trả lời này. Đạo cụ vì nó là người duy nhất đề cập đến /etc/shellstrong cơ thể của câu trả lời.
heymatthew

1
@heymatthew lý do nó bị hạ cấp là vì nó không trả lời câu hỏi được hỏi. Nó trả lời một câu hỏi hoàn toàn không liên quan.
Tabitha

17

Bạn đã thử chỉnh sửa mục shell trong cài đặt tài khoản .

Chuyển đến tùy chọn Tài khoản, mở khóa và nhấp chuột phải vào tài khoản người dùng của bạn cho hộp thoại Cài đặt nâng cao . Shell của bạn phải là / bin / zsh và bạn có thể chỉnh sửa lời gọi đó một cách thích hợp (nghĩa là thêm đối số --login).


Thật không may, điều đó không hoạt động: Tôi có thể đặt bất kỳ shell nào tôi thích bằng cách sử dụng chsh (miễn là tôi có shell này được liệt kê trong / etc / shell), tuy nhiên người ta không thể thêm đối số dòng lệnh vào shell của hộp thoại Advanced Preferences (iTerm fail để bắt đầu lên vỏ).
Ivan Tarasov

Một số cú pháp đã thay đổi trong OS X nhưng ý chính là đặt shell mặc định của bạn thành / bin / zsh như Brian chỉ ra ở trên
EngineeringDave

7
Tôi yêu SO. Tôi đã sử dụng câu trả lời này ngay bây giờ, và chỉ sau đó nhận ra tôi đã viết nó gần 4 năm trước!
Brian Agnew

-2

Sử dụng logintiện ích để tạo một vỏ đăng nhập. Giả sử rằng người dùng bạn muốn đăng nhập có tên người dùng Alice và zsh được cài đặt /opt/local/bin/zsh(ví dụ: phiên bản mới hơn được cài đặt qua MacPorts). Trong iTerm 2, đi tới Tùy chọn, Cấu hình, chọn cấu hình bạn muốn thiết lập và nhập vào Lệnh :

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

Xem man loginđể biết thêm chi tiết về các tùy chọn.


Đây là 100% không phải là một câu trả lời. Có sẽ thay đổi shell nào bạn sinh ra theo mặc định, nhưng đó không phải là câu trả lời về cách tạo một thể hiện "đăng nhập" của shell, tức là tài nguyên tất cả các biến từ đầu.
Tabitha
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.