Đặt ZSH Shell mặc định trong MacOSX [đã đóng]


98

Tôi đã cài đặt zsh trên máy Mac của mình. và bây giờ tôi muốn đặt nó làm trình bao mặc định thay vì Bash. Nhưng dường như tôi đang gặp phải lỗi sau:

$ echo $SHELL
/bin/bash
$ chsh -s /usr/bin/zsh
Changing shell for harshamv.
Password for harshamv:
chsh: /usr/bin/zsh: non-standard shell

1
Làm những gì chsh -lđầu ra? (Nếu điều đó không hiệu quả thì nội dung của nó là /etc/shellsgì?) Bạn có chắc điều này không thành công và không chỉ là cảnh báo? Thêm vào /usr/bin/zshđó có làm cho việc này hoạt động không?
Etan Reisner

1
chsh: Tùy chọn đòi hỏi một cuộc tranh cãi - sử dụng l: chpass [-l vị trí] [-u AuthName] [vỏ -s] [user]
Harsha MV

/ bin / bash / bin / csh / bin / ksh / bin / sh / bin / tcsh / bin / zsh
Harsha MV

Có chuyện gì vậy /bin/zsh?
jxh

1
Có một cách chính thức để thay đổi trình bao mặc định thành zsh ngay bây giờ. Xem tài liệu Apple "Sử dụng zsh như vỏ mặc định trên máy Mac của bạn" support.apple.com/en-ca/HT208050
Anthonyeef

Câu trả lời:


86

3 bước đơn giản:

  1. which zshđiều này cung cấp cho bạn con đường của bạn đến zsh
  2. Sau đó chsh -s /bin/zshhoặc thay thế đường dẫn đến zsh của bạn nếu khác
  3. Khởi động lại máy của bạn

yay điều đó đã hoạt động. nó có phải là Yosemite cụ thể không?
Harsha MV

2
Không, tôi không nghĩ, đó chỉ là thông tin của bạn :)
Quentin Perez

8
Một nhận xét có liên quan khác về cùng một câu hỏi cũ hơn cho biết thêm /usr/bin/zshvào để /etc/shellsgiải quyết vấn đề.
Brice

Nó hoạt động hoàn hảo
Olkunmustafa

1
Đặt nó cho phù hợp thành / etc / shell! Tìm đường dẫn zsh với '$ nano / etc / shell'. Của tôi ở / bin / zsh thay vì / usr / bin / zsh vào ngày 10.12.2
oikonomopo

187

Câu trả lời chính xác nên giải quyết được vấn đề của bạn:

chsh: / usr / bin / zsh: shell không chuẩn

Lý do của trường hợp này là vì chshsẽ chỉ chấp nhận các trình bao được xác định trong tệp / etc / shell, như bạn có thể thấy bằng cách đọc hướng dẫn cho chsh:

chsh sẽ chấp nhận tên đường dẫn đầy đủ của bất kỳ tệp thực thi nào trên hệ thống. Tuy nhiên, nó sẽ đưa ra cảnh báo nếu trình bao không được liệt kê trong tệp / etc / shell.

Để giải quyết vấn đề này và đặt zsh làm trình bao mặc định, bạn nên:

$ sudo echo "$(which zsh)" >> /etc/shells
$ chsh -s $(which zsh)

Rõ ràng, tôi cho rằng zsh là con đường của bạn ở đây. Giải pháp này cũng sẽ hoạt động nếu bạn chọn cài đặt phiên bản mới nhất zshvới brew install zsh.

BIÊN TẬP (cảm ơn vì ThisIsFlorianK đã nhận xét) :

Tùy thuộc vào thiết lập trình bao của bạn, bạn có thể nhận được một thông báo /etc/shells: Permission denied. Bạn có thể tìm thông tin về vấn đề này tại đây. Để giải quyết vấn đề này, hãy sử dụng những điều sau thay thế:

$ sudo sh -c "echo $(which zsh) >> /etc/shells"
$ chsh -s $(which zsh)

4
Điều này chính xác hơn câu trả lời được chấp nhận theo quan điểm của tôi. giả sử zsh được cài đặt tại / usr / bin / zsh, các câu trả lời khác không hoạt động. Chúng hoạt động cho OP vì theo mặc định, Apple cài đặt zsh tại / bin / zsh. Tuy nhiên, nếu bạn muốn sử dụng zsh của homebrew (được cài đặt trong / usr / local / bin / zsh), đây sẽ là cách thích hợp để làm điều đó
verboze

Tôi đã nhận được "bash: / etc / shell: Quyền bị từ chối". Câu trả lời thông qua Tùy chọn Hệ thống phù hợp với tôi.
Ricardo Stuven

44
Nếu bạn nhận được /etc/shells: Permission denied==> Đỗ rằng thay vì: sudo sh -c "echo $(which zsh) >> /etc/shells"
ThisIsFlorianK

1
stackoverflow.com/a/44547726/99834 - hoạt động mà không làm xáo trộn các tệp hệ thống. Điều duy nhất còn thiếu là một phiên bản CLI để thực hiện cùng một hoạt động.
sorin

@sorin Đây có phải là hành động phá hoại vô cớ của xu hướng này không hay thực sự có điều gì sai với câu trả lời? Tệp hệ thống là tệp văn bản có thể chỉnh sửa vì một lý do. chshcó sẵn theo mặc định vì một lý do. Mặc dù không có gì sai khi nhấp qua vô số menu để thực hiện điều tương tự, điều đó không chỉ không thể di chuyển và dễ xảy ra lỗi, mà còn gây hiểu lầm ở chỗ nó ẩn với người dùng về nguồn gốc của thay đổi.
dangom

52

Tôi có thể làm cho điều này hoạt động bằng cách làm như sau:

  1. Đi tới Tùy chọn Hệ thống
  2. Nhấp vào "Người dùng & Nhóm"
  3. Nhấp vào khóa để thực hiện thay đổi.
  4. Nhấp chuột phải vào người dùng hiện tại -> Tùy chọn nâng cao
  5. Thay đổi trình bao đăng nhập thành / bin / zsh trong trình đơn thả xuống.
  6. Mở một thiết bị đầu cuối mới và xác minh bằng echo $SHELL

4
nếu bạn cài đặt zsh qua homebrew, nó sẽ đặt zsh vào /usr/local/bin/zsh. Vì vậy, bạn sẽ cần phải chỉnh sửa /etc/shellsdưới sudo và thêm một mục nhập cho /usr/local/bin/zshtrước khi bạn có thể chọn thực thi zsh rằng hombrew cài đặt
Baldy

7

Trên MacBook công việc của tôi, tôi phải làm điều này:

sudo chsh -s /usr/local/bin/zsh my_user_name

Sau đó, tôi phải tạo một .bash_profiletệp để làm cho thiết bị đầu cuối của tôi chuyển sang z-shell mỗi khi tôi mở nó:

touch ~/.bash_profile
echo 'export SHELL=$(which zsh)' >> ~/.bash_profile
echo 'exec $(which zsh) -l' >> ~/.bash_profile

Ý tưởng cuối cùng đã được vay mượn từ đây .

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.