2009-08-14 22 views
126

Khi zsh được đặt làm vỏ đăng nhập trên Mac OS X, khi nó được bắt đầu bởi iTerm, zsh không xem xét nó đang được chạy dưới dạng vỏ đăng nhập, mặc dù nó được bắt đầu là '-zsh' ('-' được đặt là ký tự đầu tiên của arg [0]) được cho là có nghĩa là nó sẽ bắt đầu như một vỏ đăng nhập. Vì vậy, khi tôi đặt vỏ đăng nhập để bash, bash nhận ra '-' đầu tiên này bằng $ 0 và chạy dưới dạng trình bao đăng nhập, nhưng zsh thì không, mặc dù có vẻ như nó phải như vậy.Làm thế nào để làm cho zsh chạy như một vỏ đăng nhập trên Mac OS X (trong iTerm)?

Có cách nào để làm cho zsh nhận ra ‘-’ trong arg [0], hoặc làm cho iTerm chạy shell bằng một đối số dòng lệnh --login?

Trả lời

19

Bạn đã thử chỉnh sửa mục nhập vỏ trong account settings.

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. Vỏ của bạn phải là/bin/zsh và bạn có thể chỉnh sửa yêu cầu đó một cách thích hợp (nghĩa là thêm đối số --login).

+0

Thật không may, điều đó không hoạt động: Tôi có thể đặt bất kỳ trình bao nào tôi thích bằng chsh (miễn là tôi có vỏ 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 vỏ hộp thoại Tùy chọn nâng cao (iTerm không khởi động được trình bao). –

+0

Một số cú pháp đã thay đổi trong OS X nhưng ý chính là đặt trình bao mặc định thành/bin/zsh như Brian cho biết ở trên – engineerDave

+6

Tôi thích 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 đây! –

200
chsh -s $(which zsh) 

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

+1

Vui lòng đọc câu hỏi trước. Vấn đề không phải là trong thiết lập trình bao mặc định, vấn đề là zsh không phát hiện ra rằng nó được bắt đầu như là một vỏ đăng nhập. –

+1

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

+11

Câu trả lời của anh ta làm cho zsh chạy như một vỏ đăng nhập trên Mac OS X trong iTerm. Nó chỉ không làm việc đó theo cách bạn mô tả. Nhưng nó giải quyết vấn đề mà bạn đặt câu hỏi (trong tiêu đề, chứ không phải trong cơ thể) trình bày. Câu hỏi bạn kết thúc trong 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 (thay vì cách làm cho zsh chạy như shell đăng nhập) thì có lẽ bạn nên viết lại câu hỏi trong tiêu đề. – iconoclast

89

Trong iTerm -> Preferences -> Profiles Tab -> phần General thiết Command để:/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 đăng nhập shell? –

+5

Đó là tab chung trên tab Hồ sơ. –

+0

Aha! Đó là khó hiểu rằng có cả một General Tab và một Profiles> General. –

1

Sử dụng tiện ích login để tạo ra 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 trong /opt/local/bin/zsh (ví dụ: phiên bản mới hơn được cài đặt qua MacPorts). Trong iTerm 2, đi đến Preferences, Profiles, chọn cấu hình mà 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.

50

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

+2

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

+0

Cái này hoạt động hoàn hảo. Cảm ơn ... –

14

Lệnh thay đổi vỏ khi khởi động là chsh -s <path_to_shell>.Vỏ mặc định trong Mac OS X được cài đặt bên trong thư mục bin vì vậy nếu bạn muốn thay đổi để mặc định zsh sau đó bạn sẽ sử dụng sau

chsh -s /bin/zsh 

Nếu bạn đang sử dụng phiên bản khác của zsh sau đó bạn có thể phải thêm phiên bản đó vào /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 home-brew của zsh sau đó bạn phải thêm /usr/local/bin/zsh đến tập tin nói trên mà bạn có thể làm 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 làm toàn bộ điều trong một lệnh chỉ cần sao chép và dán này nếu bạn đã zsh đã được cài đặt

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

Tôi không nghĩ rằng nó là công bằng để downvote câu trả lời này. Đạo cụ vì nó là người duy nhất đề cập đến '/ etc/shell' trong phần thân của câu trả lời. – heymatthew

Các vấn đề liên quan