Tại sao .profile (chứ không phải .bashrc) nối ~ / bin vào đường dẫn?


9

.bashrclà "chung chung" hơn (theo nghĩa là .profilenguồn đó), tại sao ~/binthủ tục "bao gồm vào đường dẫn" không nằm trong .bashrc? Tại sao người dùng không muốn nó trong một vỏ không đăng nhập? (Đặc biệt là ngày nay, nơi các shell không đăng nhập phổ biến hơn *.)

Tôi biết tôi có thể tự làm thay đổi như vậy, nhưng tôi muốn biết nếu có lý do.

* không thể chứng minh điều đó, nhưng tôi nghĩ đó là trường hợp.

Câu trả lời:


13

~/.bashrc/etc/bash.bashrcđược chạy mỗi khi một bashvỏ tương tác được bắt đầu.

Ngược lại, ~/.profile/etc/profileđược chạy mỗi khi bất kỳ shell đăng nhập nào được bắt đầu. Vì vậy, nó không phải là một bashvỏ, nhưng nó phải là một vỏ đăng nhập (và nhiều bashtrường hợp vỏ không phải là vỏ đăng nhập ).

  • Một bashvỏ là một cái vỏ mà chương trình cung cấp vỏ nó là bash, chứ không phải là một số chương trình khác, chẳng hạn như dash.
  • Shell đăng nhập là một shell được khởi động tự động do hậu quả của việc đăng nhập, để cung cấp giao diện người dùng (đồ họa hoặc dòng lệnh) cho đăng nhập. Khi một vỏ đăng nhập được thoát, đăng nhập chấm dứt.

Do đó, việc đưa ra một lời khen bổ sung các mục vào PATHtrong một bashrctệp sẽ:

  1. Không làm gì khi vỏ không bash, thường là như vậy. Ví dụ: PATHsẽ không được sửa đổi khi bạn đang ở trong phiên đăng nhập đồ họa. Hãy nhớ rằng, PATHkhông chỉ được sử dụng bởi các chương trình dòng lệnh.

  2. Nối nó nhiều lần với sự có mặt của bashvỏ sò. Vì vậy, nếu bạn bắt đầu một shell trong shell - điều này rất phổ biến, vì nhiều lý do - thì bạn sẽ có nhiều ~/binmục được xếp chồng lên nhau PATH. Điều này làm cho PATHbiến môi trường khó đọc và đôi khi cũng làm giảm hiệu suất.

Đây sẽ là không mong muốn. Vì vậy, sẽ là sai lầm khi đặt điều này trong một bashrctập tin; nó thực sự thuộc về ~/.profile. ~/.profilenơi thích hợp cho:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Các shell không đăng nhập có các shell đăng nhập (hoặc một cái gì đó hoạt động như shell đăng nhập) là cha mẹ của chúng và kế thừa hầu hết các biến môi trường của chúng, bao gồm PATH, từ shell đăng nhập này. Vì vậy, việc đưa các lệnh sửa đổi đường dẫn vào ~/.profileyêu cầu bạn đăng xuất và đăng nhập lại để chúng có hiệu quả, nhưng nó cũng ảnh hưởng đến môi trường của các shell không đăng nhập (cũng như môi trường cho các chương trình không phải là shell, vì mọi chương trình đều có tập hợp các biến môi trường - được gọi là "môi trường" của nó - được kế thừa từ tiến trình cha của nó).


Tôi hiểu. Nhưng quyết định này vẫn không có ý nghĩa đối với tôi. Nếu một thiết bị đầu cuối mở ngay bây giờ, nó chỉ tải .bashrc, thì tôi không thể thấy thùng riêng của mình.
borges

@borges Nếu cấu hình mặc định không hoạt động tốt cho bạn, bạn nên thoải mái thay đổi nó. (Rốt cuộc, đó là máy tính của bạn. Hoặc ít nhất là tài khoản của bạn.) Nhưng điều này nghe có vẻ như là một lần. Đó là, có vẻ như binthư mục riêng của bạn không tồn tại khi bạn đăng nhập và bạn đã tạo nó trong phiên đăng nhập này. Nếu bạn đăng xuất và đăng nhập lại, nó sẽ ở trong bạn PATH. Vì việc tạo binthư mục riêng của bạn là việc chỉ cần thực hiện một lần, đây là sự bất tiện một lần.
Eliah Kagan

3

Đó là bởi vì các biến môi trường truyền thống chỉ đi trong /etc/profilehoặc .profile. Các bashrctập tin là cho những thứ như bí danh, cài đặt nhanh chóng, lựa chọn vỏ và vv (tức là những thứ có liên quan trực tiếp đến vỏ).

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.