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 bash
vấ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 bash
lại vỏ đăng nhập mặc định sau khi tôi đã cài đặt oh-my-zsh
, làm zsh
mặc định, sau đó nâng cấp bash
từ 3.2.53 lên 4.3.30 bằng Homebrew ( Tại sao Apple vận chuyển Yosemite với bash
phiên bản cũ ?).
Tôi nghĩ rằng SHELL
biế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ử, bash
là mặc định của bạn và bạn mở một bash
cửa sổ shell mới từ terminal thì $ export SHELL="/bin/zsh"; echo "$SHELL"
sẽ hiển thị /bin/zsh
như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 $0
bạn sẽ thấy -bash
( $0
chứ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
và -
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 UserShell
tí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/zsh
làm thay đổi thuộc UserShell
tí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/ UserShell
ngay 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.
/etc/shells
chư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.