Sự khác biệt giữa .bashrc, .bash_profile và .envir là gì?


130

Tôi đã sử dụng một số hệ thống dựa trên * nix khác nhau trong những năm qua và dường như mọi hương vị của Bash tôi sử dụng đều có một thuật toán khác nhau để quyết định chạy các kịch bản khởi động nào. Đối với các mục đích của các tác vụ như thiết lập các biến và bí danh môi trường và in thông báo khởi động (ví dụ: MOTDs), tập lệnh khởi động nào là nơi thích hợp để thực hiện những điều này?

Sự khác biệt giữa cách đặt mọi thứ trong là gì .bashrc, .bash_profile.environment? Tôi cũng thấy các file khác như .login, .bash_login.profile; những điều này bao giờ có liên quan? Sự khác biệt trong đó những cái nào được chạy khi đăng nhập vật lý, đăng nhập từ xa thông qua ssh và mở một cửa sổ thiết bị đầu cuối mới? Có sự khác biệt đáng kể nào giữa các nền tảng (bao gồm Mac OS X (và Terminal.app) và Cygwin Bash) không?

Câu trả lời:


73

Sự khác biệt chính với các tệp cấu hình shell là một số chỉ được đọc bởi các vỏ "đăng nhập" (ví dụ: khi bạn đăng nhập từ một máy chủ khác hoặc đăng nhập tại bảng điều khiển văn bản của máy unix cục bộ). đây là những cái được gọi, nói .loginhoặc .profilehoặc .zlogin(tùy thuộc vào loại vỏ bạn đang sử dụng).

Sau đó, bạn có các tệp cấu hình được đọc bởi các shell "tương tác" (như trong các tệp được kết nối với một thiết bị đầu cuối (hoặc giả thiết bị đầu cuối trong trường hợp, giả sử, một trình giả lập thiết bị đầu cuối chạy trong một hệ thống cửa sổ). như .bashrc, .tcshrc, .zshrcvv

bashlàm phức tạp này ở chỗ .bashrcchỉ đọc bởi một lớp vỏ đó là cả tương táckhông đăng nhập , vì vậy bạn có thể tìm thấy hầu hết mọi người kết thúc nói của họ .bash_profilecũng để đọc .bashrcvới một cái gì đó như

[[ -r ~/.bashrc ]] && . ~/.bashrc

Các shell khác hoạt động khác nhau - ví dụ với zsh, .zshrcluôn được đọc cho một shell tương tác, cho dù đó là một shell đăng nhập hay không.

Trang hướng dẫn sử dụng bash giải thích các trường hợp mà mỗi tệp được đọc. Có, hành vi nói chung là phù hợp giữa các máy.

.profilechỉ đơn giản là tên tập lệnh đăng nhập ban đầu được sử dụng bởi /bin/sh. bash, thường tương thích ngược với /bin/sh, sẽ đọc .profilenếu có.


48

Điều đó thật đơn giản. Nó được giải thích trong man bash:

/bin/bash
       The bash executable
/etc/profile
       The systemwide initialization file, executed for login shells
~/.bash_profile
       The personal initialization file, executed for login shells
~/.bashrc
       The individual per-interactive-shell startup file
~/.bash_logout
       The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
       Individual readline initialization file

Các shell đăng nhập là những cái được đọc một cái mà bạn đăng nhập (vì vậy, chúng không được thực thi khi chỉ khởi động xterm chẳng hạn). Có nhiều cách khác để đăng nhập. Ví dụ: sử dụng trình quản lý hiển thị X. Những người có cách khác để đọc và xuất các biến môi trường tại thời điểm đăng nhập.

Cũng đọc INVOCATIONchương trong hướng dẫn. Nó nói "Các đoạn văn sau mô tả cách bash thực thi các tệp khởi động của nó." , tôi nghĩ đó là một điểm nhấn :) Nó giải thích cái vỏ "tương tác" là gì.

Bash không biết về .environment. Tôi nghi ngờ đó là một tệp phân phối của bạn, để đặt các biến môi trường độc lập với vỏ mà bạn lái.


1
Bạn có thể thêm /etc/bashrcvào để điền vào câu trả lời?
Nemoden

9

Về mặt kinh điển, ~/.profileđược Bourne Shell sử dụng và có thể được Bash hỗ trợ như một biện pháp kế thừa. Một lần nữa, ~/.login~/.cshrcđược sử dụng bởi C Shell - Tôi không chắc chắn rằng Bash sử dụng chúng chút nào.

Các ~/.bash_profilesẽ được sử dụng một lần, lúc đăng nhập. Các ~/.bashrckịch bản là đọc mỗi khi một vỏ được bắt đầu. Điều này tương tự /.cshrcvới C Shell.

Một hậu quả là những thứ trong ~/.bashrcnên càng nhẹ (tối thiểu) càng tốt để giảm chi phí khi bắt đầu một vỏ không đăng nhập.

Tôi tin rằng ~/.environmenttệp này là tệp tương thích cho Korn Shell.


7

Tôi đã tìm thấy thông tin về .bashrc và .bash_profile tại đây để tổng hợp:

.bash_profile được thực thi khi bạn đăng nhập. Thứ bạn đặt vào đó có thể là ĐƯỜNG của bạn và các biến môi trường quan trọng khác.

.bashrc được sử dụng cho shell không đăng nhập. Tôi không chắc điều đó có nghĩa là gì. Tôi biết rằng RedHat thực thi nó mỗi khi bạn khởi động một shell khác (su cho người dùng này hoặc đơn giản gọi lại bash) Bạn có thể muốn đặt bí danh vào đó nhưng một lần nữa tôi không chắc điều đó có nghĩa gì. Tôi chỉ đơn giản là bỏ qua nó bản thân mình.

.profile tương đương với .bash_profile cho thư mục gốc. Tôi nghĩ rằng tên được thay đổi để cho các shell khác (csh, sh, tcsh) sử dụng nó là tốt. (bạn không cần một người dùng)

Ngoài ra còn có .bash_logout sẽ thực thi tại, yeah đoán đúng ... đăng xuất. Bạn có thể muốn dừng deamons hoặc thậm chí làm một chút vệ sinh. Bạn cũng có thể thêm "xóa" ở đó nếu bạn muốn xóa màn hình khi đăng xuất.

Ngoài ra, có một theo dõi đầy đủ về từng tệp cấu hình ở đây

Chúng có thể thậm chí phụ thuộc vào distro., Không phải tất cả các distro đều chọn có mỗi cấu hình với chúng và một số thậm chí còn nhiều hơn. Nhưng khi họ có cùng tên, họ thường bao gồm cùng một nội dung.


4

Theo Josh Staiger , Terminal.app của Mac OS X thực sự chạy shell đăng nhập thay vì shell không đăng nhập theo mặc định cho mỗi cửa sổ terminal mới, gọi .bash_profile thay vì .bashrc.

Ông đề nghị:

Hầu hết thời gian bạn không muốn duy trì hai tệp cấu hình riêng biệt cho các vỏ đăng nhập và không đăng nhập - khi bạn đặt PATH, bạn muốn nó áp dụng cho cả hai. Bạn có thể khắc phục điều này bằng cách tìm nguồn .bashrc từ tệp .bash_profile của bạn, sau đó đặt PATH và các cài đặt phổ biến trong .bashrc.

Để thực hiện việc này, hãy thêm các dòng sau vào .bash_profile:

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

Bây giờ khi bạn đăng nhập vào máy của mình từ bàn điều khiển .bashrc sẽ được gọi.


2

Một nơi tốt để xem xét là trang người đàn ông của bash. Đây là một phiên bản trực tuyến. Tìm phần "HÓA ĐƠN".


0

Tôi đã sử dụng các bản phân phối gia đình Debian có vẻ như để thực thi .profile, nhưng không .bash_profile, trong khi các dẫn xuất của RHEL thực thi .bash_profiletrước đó .profile.

Nó dường như là một mớ hỗn độn khi bạn phải thiết lập các biến môi trường để hoạt động trong bất kỳ HĐH Linux nào.

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.