Tại sao nguồn Mac OS X không ~ / .bashrc? [bản sao]


95

Câu hỏi này đã có câu trả lời ở đây:

Tôi đã tìm thấy rất nhiều người tìm ra lý do tại sao hướng dẫn tương tự như thế này:

Put X to your ~/.bashrc and you can do Y

đừng làm việc

Nó luôn chỉ ra rằng các tệp khởi động của Mac OS X (hoặc chính Bash của Mac) không nguồn ~ / .bashrc, trong vỏ đăng nhập hoặc trong vỏ được sinh ra từ hệ thống cửa sổ - như ứng dụng Terminal trong Mac OS X)

Tại sao điều này, khi tất cả các hệ thống tương tự Unix khác với Bash mà tôi đã làm việc trước đây đã làm điều này?

Tái bút

Tôi đã tìm thấy những gì Bash nói về các tệp khởi động (có thể hữu ích):

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 tùy chọn --login, trước 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 ~ / .bash_profile, ~ / .bash_login và ~ / .profile, theo thứ tự đó, đọc và thực thi các lệnh từ lệnh đầu tiên tồn tại và có thể đọc được. Tùy chọn --noprofile có thể được sử dụng khi trình bao bắt đầu ngăn chặn hành vi này.

Nguồn: http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files


Tôi cũng nhận thấy rằng ~/.bash_profileđược thực hiện nhưng không ~/.bashrc. Khốn khổ
igaurav

Câu trả lời:


90

Trong OSX, thiết bị đầu cuối theo mặc định bắt đầu phiên đăng nhập để đọc .bash_profile, v.v. (Quá trình đăng nhập GUI yêu cầu tên và mật khẩu của bạn không sử dụng tập lệnh shell và bắt đầu không có shell, tất cả được thực hiện từ launchd và không gian làm việc)

Trên các Unice xterm khác chạy shell không đăng nhập theo mặc định để họ đọc .bashrc như các tập lệnh hiển thị mật khẩu của bạn, v.v. khi đăng nhập, hãy gọi phiên đăng nhập và tất cả các thiết bị đầu cuối là quy trình phụ của điều này và kế thừa môi trường shell.

Từ tài liệu GNU mà bạn đề cập đến

Được gọi là một vỏ không đăng nhập tương tác

Khi một vỏ tương tác không phải là vỏ đăng nhập được khởi động, Bash đọc và thực thi các lệnh từ ~ / .bashrc, nếu tệp đó tồn tại. Điều này có thể bị ức chế bằng cách sử dụng tùy chọn --norc. Tùy chọn tệp --rcfile sẽ buộc Bash đọc và thực thi các lệnh từ tệp thay vì ~ / .bashrc.

Vì vậy, thông thường, ~ / .bash_profile của bạn chứa dòng

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

sau (hoặc trước) bất kỳ khởi tạo cụ thể đăng nhập.


7
Bỏ qua = Unix?
Paul Brewczynski

8
Ý tôi là rõ ràng - Tôi không hiểu tiếng Latin ở trường nên loại bỏ dạng số nhiều - xem en.wikipedia.org/wiki/Unix
user151019

8
... và mẫu thứ 3 "Unixen" (mặc dù tôi thích Unices)
Earcam

7
và "Kỳ lân" thứ tư ...
tink

8
chúng ta đừng quên hình thức null, tức là "hoạn quan"
smatthewenglish

19

bashchỉ đọc .bashrccho shell không đăng nhập :

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ừ ~ / .bashrc, nếu tệp đó tồn tại. Điều này có thể bị ức chế bằng cách sử dụng tùy chọn --norc. Tùy chọn tệp --rcfile sẽ buộc bash đọc và thực thi các lệnh từ tệp thay vì ~ / .bashrc.

Vì Terminal bắt đầu bashnhư một vỏ đăng nhập (chạy wđể thấy rằng các bashthể hiện được thực thi như -bash), .bashrckhông bao giờ được đọc tự động.


Vì vậy, vấn đề là, ứng dụng Termina trên Mac OS X luôn tạo phiên bản "đăng nhập" của bash? Tại sao ? Nếu bạn thực sự không đăng nhập. (Bạn đã đăng nhập sớm hơn từ GUI)
Paul Brewczynski

Tại sao các hệ thống unix khác đọc ~ / .bashrc?
Paul Brewczynski

3
Không ai ở đây có thể giải thích các quyết định thiết kế của Apple. Tôi có thể dễ dàng tranh luận cả hai bên nhưng điều này cũng không giúp được gì. Vì vậy, chỉ cần chấp nhận nó vì nó có thể là lựa chọn tốt nhất
nohillside

Chà, đây là lần đầu tiên bạn chạy shell như bạn vì vậy nó là thông tin đăng nhập, trong X11 dựa trên Unices bạn bắt đầu bằng cách chạy shell mà sau đó chạy X để nó không phải là đăng nhập
user151019

@PaulBrewczynski Vâng Linux có một cuộc gọi từ .bash_profile vào .bashrc.
Paul Stelian
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.