Câu hỏi $ PATH được đặt trong OS X 10.6 Snow Leopard ở đâu?


Tôi gõ echo $PATH trên dòng lệnh và nhận

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

Tôi đang tự hỏi nơi này đang được thiết lập kể từ khi tôi .bash_login tệp trống.

Tôi đặc biệt lo ngại rằng, sau khi cài đặt MacPorts, nó đã cài đặt một đống rác /opt. Tôi không nghĩ rằng thư mục đó thậm chí tồn tại trong một cài đặt Mac OS X bình thường.

Cập nhật: Nhờ vào jtimberman để sửa echo $PATH tuyên bố


132
2017-11-11 18:48


gốc


nhận xét từ SMcCandlish:easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit  /etc/paths  . While the new  /etc/paths.d/  thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide. - Sathya♦
@Sathya, Dường như với tôi /etc/paths.d rất hữu ích cho các tập lệnh cài đặt. Nếu tôi muốn tập lệnh cài đặt của mình thêm chương trình đã cài đặt vào đường dẫn, tôi có thể thả tệp vào /etc/paths.d. Nếu tôi muốn chỉnh sửa đường dẫn theo cách thủ công, /etc/paths là một lựa chọn tốt hơn. - haydenmuhl
Tôi đã thực hiện một kịch bản chủ yếu dựa trên bài đăng này, nhanh chóng in ra nơi PATH được định nghĩa dọc theo nhiều vị trí sau: gist.github.com/lopespm/6407349952bc8a1ff8fb - Pedro Lopes


Các câu trả lời:


Khi nào bash bắt đầu nó đọc các tệp sau mỗi khi bạn đăng nhập. Với mục đích của OS X, điều này có nghĩa là mỗi lần bạn mở một hệ điều hành mới Terminal cửa sổ.

/etc/profile
~/.bash_profile
~/.bash_login   (if .bash_profile does not exist)
~/.profile      (if .bash_login does not exist)

Khi bạn bắt đầu một trình bao mới bằng cách nhập bash trên dòng lệnh, nó đọc .bashrc

OS X cũng sử dụng ~/.MacOSX/environment.plist để đặt nhiều biến môi trường hơn, bao gồm cả đường dẫn nếu cần.

Cuối cùng, /etc/paths và /etc/paths.d được đọc bởi vỏ quá.


/opt/local/bin vv được thêm vào ~/.tcshrc bởi MacPorts. Ngoài ra hãy chắc chắn để xem xét ~/.cshrc.


152
2017-11-11 20:57



Rõ ràng, ~/.MacOSX/environment.plist không làm việc cho một số người. Trong Thay đổi đường dẫn cho OS X một cách khác bằng cách sử dụng thư mục /etc/paths.d được mô tả. Tôi đã không kiểm tra điều đó. - Arjan
+1 cho ~/.cshrc. Đã cố gắng để tìm ra lý do tại sao ~/.profile không hoạt động. - tomlogic
Tôi nghĩ câu trả lời này chưa hoàn chỉnh. Tôi đang cố gắng tìm ra một con đường sai (không tồn tại): / usr / bin / local, shell của tôi đang phàn nàn về, và nó không nằm trong bất kỳ tệp nào trong số đó. - Tommy
Tôi nghĩ .bashrc được đọc bất kể nếu bạn nhập bash hay không. - Xiao Peng - ZenUML.com


Hãy xem tập tin /etc/paths, được sử dụng bởi /usr/libexec/path_helper, được sử dụng bởi /etc/profile.

Đối với MacPorts, sử dụng sudo /etc/paths/opt/local/bin và mở lại cửa sổ đầu cuối.


47
2017-12-30 20:31





Nghiêm túc, Leopard đã cho chúng ta một cách mới để thêm đường dẫn. Chỉ cần tạo một tệp có chứa phần đường dẫn mà bạn muốn thêm và đặt nó trong /etc/paths.d

Một ví dụ nhanh về việc thực hiện điều này trong một bước là:

echo "/some/path/to/add" >> /etc/paths.d/somefilename

Nếu không, bạn chỉ cần truy cập /etc/paths.d và đặt trực tiếp tệp đó. Dù bằng cách nào, mọi phần đường dẫn trong các tệp trong thư mục đó sẽ được nối vào đường dẫn mặc định.

Điều này cũng làm việc cho manpath.

Đây là liên kết để biết thêm chi tiết:

ars technica: làm thế nào để tôi thêm một cái gì đó để PATH trong báo tuyết?

Trên lưu ý thứ hai: MacPorts đặt mọi thứ vào thư mục opt chính xác vì nó không được sử dụng bởi các công cụ của Apple. Bằng cách đó nó sẽ không xung đột. Hướng dẫn của họ (xuất sắc bằng văn bản, BTW) có một giải thích về lý do tại sao nó sử dụng lựa chọn và làm thế nào để thay đổi mặc định nếu bạn muốn.

Hướng dẫn MacPorts


25
2018-03-25 18:07



Rất tuyệt. Bây giờ chúng tôi chỉ phải có những ứng dụng phụ thuộc vào đường dẫn đó để không còn gây ô nhiễm các tệp hồ sơ của chúng tôi nữa ... - Daniel Beck♦
Yêu nó. Đơn giản! - Andrew Hedges
nhận xét từ SMcCandlish: I have to concur that there's nothing weird or bad about MacPorts using   /opt  (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation. - Sathya♦
Một dòng, không phụ thêm vào các tệp và loại bỏ dễ dàng. Thích cái này. Cảm ơn leanne - Ibrahim Lawal


Để hiển thị đường dẫn của bạn, hãy echo $ PATH.

echo $PATH

Để đặt đường dẫn của bạn, hãy chỉnh sửa ~/.bash_profile, không phải ~/.bash_login.


4
2017-11-11 19:07





Ngoài ra còn có con đường được xác định bởi ssh.

So sánh echo $PATH đến ssh localhost 'echo $PATH'. Vì ssh không đọc / etc / profile, / usr / libexec / path_helper không chạy và do đó các đường dẫn / etc / bị bỏ qua. Bây giờ cố gắng ssh localhost 'source /etc/profile; echo $PATH'. Các con đường nên gần hơn. Những khác biệt còn lại có thể là do sửa đổi đường dẫn trong tệp .bash_profile của bạn (cũng bị bỏ qua bởi ssh) và .bashrc (được đọc bởi ssh).

Nếu bạn muốn đường dẫn ssh của bạn tương tự như đường dẫn thiết bị đầu cuối bình thường của bạn, bạn có thể thêm source /etc/profile vào .bashrc của bạn.


3
2018-02-07 19:36



Cảm ơn gợi ý! Tôi đã tìm kiếm chính xác cho các giải pháp với ssh. svn + ssh không thể tìm thấy lệnh svnserve chính xác vì đường dẫn đến svnserve nằm trong .profile, nhưng không có trong .bashrc. - KIR


Nó có thể được định nghĩa trong:

  • Biến hệ thống - /etc/paths
  • Biến người dùng - xem giải thích của @Steve Folly

2
2018-06-01 09:50





Trên thực tế nó được lưu trữ trong của bạn .profile tệp thay vì .bash_login và thông thường MacPorts sẽ sử dụng nó thay vì .bash_login tập tin.

Ngoài ra /opt thư mục thường được tạo bởi MacPorts và nó lưu trữ các tập tin của nó trong thư mục này.


1
2017-11-11 19:13





Về tài liệu cho /usr/libexec/path_helper tiện ích, thành phần ban đầu cho $ PATH được lấy từ /etc/pathsvà theo mặc định trông giống như

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

cho OS-X Snow Leopard


1
2018-06-26 01:40