Tôi đã xem xét toàn bộ hệ thống nhưng tôi không thể tìm thấy nó. Khi tôi làm echo $ PATH tôi nhận được những thứ tôi đã thêm vào, cộng với đường dẫn mặc định. Tôi không có một .profile, và tôi có một. Bashrc, nhưng đường dẫn mặc định không có trong đó. Tôi đang tìm nó chỉ để biết nó nằm ở đâu vì tất cả các hướng dẫn đều giải thích rằng nó nằm trong .profile ... nhưng nếu bạn không có nó thì sao? Nó nằm ở đâu? Có ai có ý kiến gì không?
Trả lời
Nếu bạn làm sudo man path_helper
, nó sẽ nói một chút về cách nó đặt đường dẫn với nhau. Bạn có thể xem trong /etc/paths
và /etc/paths.d
. Tôi đã làm, và tìm thấy những gì tôi đang tìm kiếm.
Nhiều cài đặt trên toàn hệ thống bao gồm PATH
được đặt trong /etc/profile
được đọc bởi bash
khi khởi động. Trên Mac OS X, tệp này thường sử dụng path_helper
để đặt PATH
. Tiện ích này lần lượt đọc thông tin từ các tệp cấu hình hệ thống khác theo số /etc
(xem path_helper
manpage). Lưu ý rằng ngay cả khi bạn vô hiệu hóa việc đọc tệp khởi tạo bằng bash (ví dụ: với các tùy chọn dòng lệnh như --noprofile
), nó vẫn sẽ kế thừa môi trường của quy trình gốc.
Tôi chỉ nhận được regex. Tôi đang tìm những thứ như/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin Nhưng tôi không có .profile với điều đó, và nó không phải trong .bashrc của tôi, nhưng tôi biết nó tồn tại cuz Tôi có thể echo nó từ $ PATH – Andy
Tôi thấy những gì bạn đang nói. – Andy
Nếu bạn bắt đầu tại/etc/profile, nó sẽ giống như thế này:
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
Đó là thử nghiệm để xem nếu tập tin tồn tại và nếu như vậy, thực hiện nó. Nếu bạn thực hiện nó bằng tay, bạn sẽ nhận được một cái gì đó như thế này:
PATH="/usr/bin:/bin:/usr/sbin:/usr/local/bin:/usr/X11/bin"; export PATH;
Tôi tin rằng đó là những gì bạn đang tìm kiếm. Vì vậy, nó đến từ/etc/profile, mà lần lượt gọi một tập tin thực thi mà thiết lập đường dẫn.
Tôi hiểu điều đó, và tôi nhìn vào những gì Adam chỉ ra, nhưng để điều đó xảy ra, nó cần lấy thông tin từ đâu đó. Các biểu thức bên trong path_helper có thực sự tạo/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin không? – Andy
Đó thực sự là nơi các đường dẫn đến từ (thông qua '/ etc/profile' và'/etc/csh.login' tùy thuộc vào việc shell của bạn là sh/bash hay csh/tcsh). Tuy nhiên, hãy xem mã bên trong kịch bản để xem phần còn lại của câu trả lời: nó nhìn vào '/ etc/paths' và'/etc/paths.d/* '(tất cả đều là các tệp, với một dòng trên mỗi đường dẫn nhập để bao gồm). – torek
Tôi không hiểu ý bạn là gì bởi "biểu thức". Path_helper là một tệp thực thi nhị phân. Nó được gọi là một phần của một lệnh shell bằng cách sử dụng backticks (dòng 2) mà xuất ra helper đường dẫn được tạo ra. Phần eval của dòng sau đó chỉ ra rằng đầu ra của path_helper sẽ được thực thi như một phần của shell. Lưu ý phần cuối cùng của nó là xuất khẩu PATH ;, trong đó đặt kết quả vào vỏ môi trường của bạn. –
Ồ, cảm ơn bạn rất nhiều vì điều đó. – Andy
Điều chắc chắn. Đó là một chút đau đớn để tìm :). – beOn
Cảm ơn từ một người lurker! Điều này thực sự làm tôi bực mình. – user18197