Trường hợp $ PATH được đặt trong OS X 10.6 Snow Leopard?


139

Tôi gõ echo $PATHvào 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 sẽ được thiết lập vì .bash_logintập tin của tôi trống.

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

Cập nhật: Cảm ơn jtimberman đã sửa echo $PATHcâu nói của tôi


5
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.
Sathyajith Bhat

@Sathya, có vẻ như tôi /etc/paths.drất hữu ích cho việc cài đặt tập lệnh. 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 tin vào /etc/paths.d. Nếu tôi muốn chỉnh sửa đường dẫn bằng tay, /etc/pathslà một lựa chọn tốt hơn.
haydenmuhl

Tôi đã tạo một kịch bản chủ yếu dựa trên bài đăng này, nó nhanh chóng in ra nơi PATH được xác định dọc theo nhiều vị trí này: gist.github.com/lopespm/6407349952bc8a1ff8fb
Pedro Lopes

Câu trả lời:


161

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

/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 shell mới bằng cách gõ bashvào dòng lệnh, nó sẽ đọ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ác đường dẫn nếu cần thiết.

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


/opt/local/binvv được thêm vào ~/.tcshrcbởi MacPorts. Cũng hãy chắc chắn để nhìn vào ~/.cshrc.


5
Rõ ràng, ~/.MacOSX/environment.plistkhông làm việc cho một số người. Trong Change Path 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 ~/.profilekhông làm việc.
tomlogic

Tôi nghĩ rằng câu trả lời này là không đầy đủ. Tôi đang cố gắng tìm ra nơi một đường dẫn sai (không tồn tại): / usr / bin / local, shell của tôi đang phàn nàn và nó không nằm trong bất kỳ tệp nào trong số đó.
Tommy

Tôi nghĩ .bashrclà đọc bất kể bạn gõ bashhay không.
Xiao Peng - ZenUML.com

48

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/binvà mở lại cửa sổ terminal.


25

Nghiêm túc mà nói, 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 chứa phần đường dẫn bạn muốn thêm và đặt nó vào /etc/paths.d

Một ví dụ nhanh về việc 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ó thể truy cập /etc/paths.d và đặt tệp trực tiếp vào đó. Dù bằng cách nào, bất kỳ phần đường dẫn nào trong các tệp trong thư mục đó sẽ được thêm vào đường dẫn mặc định.

Điều này cũng hoạt động cho manpath.

Đây là một 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ì đó vào PATH trong báo tuyết?

Trên lưu ý thứ 2: 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ọ (được viết một cách xuất sắc, BTW) có một lời giải thích về lý do tại sao nó sử dụng opt và cách thay đổi mặc định đó nếu bạn muốn.

Hướng dẫn về MacPorts


Rất tuyệt. Bây giờ chúng tôi chỉ phải làm cho các ứng dụng phụ thuộc đường dẫn đó không còn làm ô 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.
Sathyajith Bhat

Dòng đơn, không nối thêm vào tập tin và dễ dàng loại bỏ. Thích cái này. Cảm ơn leanne
Ibrahim Lawal

4

Để hiển thị đường dẫn của bạn, lặp lại $ PATH.

echo $PATH

Để thiết lập đường dẫn của bạn, chỉnh sửa ~/.bash_profile, không ~/.bash_login.


3

Cũng có con đường được xác định bởi ssh .

So sánh echo $PATHvới ssh localhost 'echo $PATH'. Vì ssh không đọc / etc / profile, / usr / libexec / path_helper không chạy và do đó / etc / path bị bỏ qua. Bây giờ hãy thử ssh localhost 'source /etc/profile; echo $PATH'. Các đường dẫn nên gần hơn. Sự khác biệt còn lại có thể là do sửa đổi đường dẫn trong .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 giống với đường dẫn đầu cuối bình thường của bạn, bạn có thể thêm source /etc/profilevào .bashrc của mình.


Cảm ơn các 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

2

Nó có thể được định nghĩa trong một trong hai:

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

1

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

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


1

Về tài liệu cho /usr/libexec/path_helpertiện ích, các 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 báo tuyết OS-X

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.