Trong Linux và, theo hiểu biết của tôi, tất cả các hệ thống Unix, trình giả lập thiết bị đầu cuối đều chạy các shell tương tác, không đăng nhập theo mặc định. Điều này có nghĩa là, đối với bash, shell bắt đầu sẽ:
Khi một vỏ tương tác không phải là vỏ đăng nhập được khởi động, bash sẽ đọc và thực thi các lệnh từ
/etc/bash.bashrc
và~/.bashrc
, nếu các tệp này tồn tại. Điều này có thể bị ức chế bằng cách sử dụng--norc
tùy chọn.Các
--rcfile
tùy chọn tập tin sẽ buộc bash để đọc và thực hiện các lệnh từ tập tin thay vì/etc/bash.bashrc
và~/.bashrc
.
Và cho shell đăng nhập:
Khi bash được gọi dưới dạng shell đăng nhập tương tác hoặc dưới dạng shell không tương tác với
--login
tùy chọn, đầu tiên nó sẽ đọc và thực thi các lệnh từ tệp/etc/profile
, nếu tệp đó tồn tại. Sau khi đọc tệp đó, nó tìm kiếm~/.bash_profile
,~/.bash_login
và~/.profile
, theo thứ tự đó, và đọc và thực thi các lệnh từ cái đầu tiên tồn tại và có thể đọc được.Các
--noprofile
tùy chọn có thể được sử dụng khi vỏ được bắt đầu để ức chế hành vi này.
Tuy nhiên, trên OSX, shell mặc định (là bash) đã bắt đầu trong terminal mặc định (Terminal.app) thực sự là nguồn ~/.bash_profile
hoặc ~.profile
v.v. Nói cách khác, nó hoạt động như một vỏ đăng nhập.
Câu hỏi chính : Tại sao shell tương tác mặc định là shell đăng nhập trên OSX? Tại sao OSX chọn làm điều này? Điều này có nghĩa là tất cả các hướng dẫn / hướng dẫn cho những thứ dựa trên shell đề cập đến việc thay đổi mọi thứ trong ~/.bashrc
sẽ thất bại trên OSX hoặc ngược lại ~/.profile
. Tuy nhiên, trong khi nhiều lời buộc tội có thể được san bằng tại Apple, việc thuê các nhà phát triển bất tài hoặc ngu ngốc không phải là một trong số họ. Có lẽ, họ đã có một lý do tốt cho việc này, vậy tại sao?
Câu hỏi con: Terminal.app có thực sự chạy shell đăng nhập tương tác hay họ đã thay đổi hành vi của bash? Đây có phải là đặc trưng của Terminal.app hay nó độc lập với trình giả lập thiết bị đầu cuối?