Sự khác biệt giữa tiếng vang của $ echo $ PATH và / etc / path là gì?


10

Khi tôi lặp lại $ PATH tôi nhận được điều này : Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools.

Tôi muốn xóa một số đường dẫn khỏi đây, nhưng khi tôi mở tệp bằng lệnh vim /etc/paths, tôi nhận được các kết quả sau:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

Tập tin / etc / path có khác với biến $ PATH không?


Phiên bản nào của OS X? Tôi không có /etc/pathstrong tôi, nhưng tôi đang chạy 10.4.11và mọi thứ có lẽ đã thay đổi kể từ đó
Fox

1
Nhưng theo câu trả lời trên AskDifferent , /etc/pathsđược sử dụng để tạo mặc định $PATH, sau này bạn có thể sửa đổi
Fox

Đó là mặc định. Tuy nhiên, khi người dùng khởi động trình bao của mình, nó sẽ bị sửa đổi bởi các tệp khác có nguồn gốc, như ~/.bashrchoặc~/.profile
Sergiy Kolodyazhnyy

Câu trả lời:


14

/etc/pathslà một phần của những gì được sử dụng để thiết lập $PATHcho các quy trình shell. Khi bạn mở một cửa sổ Terminal mới, nó sẽ khởi động bash, nó chạy một số tập lệnh khởi động: /etc/profile~/.bash_profileHOẶC (nếu điều đó không tồn tại) ~/.bash_loginHOẶC (nếu điều đó không tồn tại) ~/.profile. Các tập lệnh này thiết lập môi trường shell, bao gồm $PATH.

Một trong những điều được /etc/profilethực hiện là chạy /usr/libexec/path_helper, trong đó đọc /etc/pathsvà bất kỳ tệp nào trong đó /etc/paths.d, và thêm nội dung của chúng vào $PATH. Nhưng đây chỉ là điểm khởi đầu; tập lệnh khởi động của riêng bạn (nếu có tồn tại) có thể thêm vào $PATH, chỉnh sửa nó, thay thế hoàn toàn, v.v.

Đối với tôi có vẻ như tập lệnh khởi động của bạn (và / hoặc những thứ nó chạy) đang thêm một số mục vào bộ cơ bản mà nó nhận được /etc/paths. "Users / myusername / .node_modules_global / bin: /Users/mac/.node_modules_global/bin:" được thêm vào đầu $PATH(có nghĩa là các thư mục đó sẽ được tìm kiếm trước) và ": / Users / mac / Library / Android / sdk / platform-tools: / platform-tools "được thêm vào cuối. Nếu bạn muốn biết chính xác những gì thêm chúng, bạn cần xem xét kịch bản khởi động của bạn.

BTW, quá trình thiết lập này $PATHchỉ áp dụng cho các bash "đăng nhập" bash. Bất cứ thứ gì được chạy bởi bash shell sẽ được thừa hưởng $PATHtừ nó, vì vậy có lẽ về cơ bản là có cùng một thứ. bash shell không đăng nhập theo một quy trình thiết lập hơi khác. Các shell khác và mọi thứ không bắt đầu từ shell hoàn toàn (ví dụ: công việc cron) có thể hoàn toàn khác nhau $PATHs.


Lưu ý rằng đối với các shell không đăng nhập (ví dụ /usr/local/bin/bashnhư được cài đặt bởi brew, không có -lđối số), /usr/libexec/path_helpersẽ không được sử dụng và /usr/local/binkhông được bao gồm theo mặc định trong $PATH. Để sử dụng path_helpertrong một kịch bản hoặc tương tác, lệnh là eval $(/usr/libexec/path_helper).
Kyle Strand

0

Những nơi đầu tiên tôi muốn kiểm tra sửa đổi là,

~/.profile
~/.bashrc
~/.bash_profile

Nếu bạn đang sử dụng một cái gì đó không phải là Bash, hãy kiểm tra các tệp cấu hình cho nó để xem bất kỳ đề cập nào về PATH.

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.