chsh không thay đổi $ SHELL


9

Tôi đang gặp một số khó khăn trong việc thay đổi giá trị $SHELLtrong ứng dụng iTerm của OSX. iTerm đang bắt đầu /bin/zsh, nhưng giá trị của $SHELLdường như không thay đổi.

Những điều tôi đã làm:

  1. Đã thay đổi "lệnh" như /bin/zshtrong cửa sổ cấu hình của iTerm.
  2. Thực hiện chshđể thay đổi vỏ sang /bin/zsh.
  3. ITerm đã được xác nhận /bin/zsh

LƯU Ý # 1: Trong ứng dụng thiết bị đầu cuối chứng khoán của OSX, "Terminal.app":

echo $SHELL
/bin/zsh

LƯU Ý # 2: Trong ứng dụng thiết bị đầu cuối phổ biến của OSX, "iTerm.app":

$ echo $SHELL
/bin/bash

$ echo $USER
$ melvkim

$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made

1
Bạn đã nhìn vào /etc/shellschưa? Hướng dẫn quy định rằng nếu shell bạn chỉ định không có trong tệp đó, thì nó không được coi là shell tiêu chuẩn.
Bob Dalgleish

Câu trả lời:


5

Vấn đề là cài đặt xung đột của ứng dụng "iTerm" với trình bao. Để giải quyết, tôi đã đặt lại lệnh "đăng nhập shell" trong cửa sổ tùy chọn iTerm:

iTerm.app -> Tùy chọn -> Cấu hình -> Chung -> Lệnh -> Nhấp vào "Vỏ đăng nhập"

Sau đó, tôi thực hiện chshđể sửa đổi nó như /bin/zsh.

Để tái tạo vấn đề (có $ SHELL được đặt là /bin/bash/, mặc dù vỏ đăng nhập là /bin/zsh), tôi chỉ phải thay đổi cài đặt "iTerm" thành "Command: / bin / zsh /".


1

Các -slá cờ cho chshnỗ lực duy nhất để thay đổi vỏ, và có lẽ không do Open Directory: Hệ thống UNIX thường 'chsh' sẽ sửa đổi /etc/passwdnhập cảnh. Tuy nhiên, tôi đã có thể chạy chshmà không cần đối số, điều này đã cho tôi một trình soạn thảo và các thông tin sau:

# 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:

Tôi đã có thể chỉnh sửa mục nhập "Shell:" /bin/zshvà các cửa sổ Terminal tiếp theo được mở bằng dấu nhắc Z-shell.


Tôi đã cố gắng chshmà không có đối số. Vẫn không có may mắn. Biến không thay đổi. Trong thực tế, khi trình soạn thảo được tải, nó đã hiển thị /bin/zsh.
melvynkim

Hãy thử thay đổi trình bao với trình soạn thảo. Tôi đã thực hiện một ảnh chụp màn hình của tôi thay đổi từ / bin / tcsh sang / bin / zsh và trở lại. bonmot.ca/~nevin/chsh.mov
Nevin Williams

Cảm ơn bạn rất nhiều vì đã dành thời gian ghi lại đăng tải screencast của bạn! Giải pháp của bạn được cho là đang làm việc trên các trình giả lập thiết bị đầu cuối khác, nhưng tôi không muốn thay đổi $SHELLtrên iTerm. Vui lòng tham khảo câu trả lời của tôi để biết chi tiết .. Cảm ơn!
melvynkim

1

Nhìn vào đây để giải thích tuyệt vời và giải pháp được đăng bởi @ mkuity0 [liên quan đến bashvấn đề nâng cấp.

Tôi đã gặp một vấn đề tương tự khi làm ngược lại trên hệ thống của mình (OS X 10.10.1): tạo bashlại vỏ đăng nhập mặc định sau khi tôi đã cài đặt oh-my-zsh, làm zshmặc định, sau đó nâng cấp bashtừ 3.2.53 lên 4.3.30 bằng Homebrew ( Tại sao Apple vận chuyển Yosemite với bashphiên bản cũ ?).

Tôi nghĩ rằng SHELLbiến môi trường phản ánh nhưng không kiểm soát vỏ đăng nhập mặc định thực tế cho người dùng. Ví dụ: nếu, giả sử, bashlà mặc định của bạn và bạn mở một bashcửa sổ shell mới từ terminal thì $ export SHELL="/bin/zsh"; echo "$SHELL"sẽ hiển thị /bin/zshnhưng sẽ không có thay đổi thực sự bởi vì nếu bạn mở một cửa sổ shell mới từ terminal và $ echo $0bạn sẽ thấy -bash( $0chứa tên và đường dẫn của lệnh đã khởi động cửa sổ shell, trong trường hợp này bash-bên cạnh nó chỉ ra rằng đó là một vỏ đăng nhập).

Như @ mkuity0 đã chỉ ra vỏ đăng nhập mặc định thực tế cho người dùng được kiểm soát bởi thuộc UserShelltính trong hồ sơ người dùng trong cơ sở dữ liệu nội bộ của hệ thống - điều này có thể được truy vấn và cập nhật bằng tiện ích dòng lệnh dscl. Thông tin này sẽ được chuyển đến ứng dụng đầu cuối của bạn khi bạn mở một cửa sổ shell.

Điều gì chsh -s /bin/zshlàm thay đổi thuộc UserShelltính này để đặt nó thành zsh- bạn có thể kiểm tra điều này bằng cách thực hiện dscl . -read /Users/$USER/ UserShellngay sau đó, và bạn sẽ thấy UserShell: /bin/zsh. Nhưng thay đổi không được thực hiện trong cửa sổ hiện tại, cho đến khi bạn làm điều gì đó như được exec su - $USERđề xuất bởi @ mkuity0 hoặc cho đến khi bạn đóng và mở một cửa sổ shell.


0

Hãy thử thực hiện lệnh: chsh -s /bin/zshtừ thiết bị đầu cuối Mac mặc định.


1
Điều này làm gì khác với OP?
JMY1000

@ JMY1000 Nếu bạn cố gắng thực hiện lệnh đó từ iTerm, những thay đổi sẽ không được phản ánh. Bạn sẽ có thể làm cho nó hoạt động bằng cách thực hiện nó từ thiết bị đầu cuối mặc định của Mac.
mohitmayank
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.