Đặt biến môi trường PATH trên toàn hệ thống trong Mavericks


41

Trong các phiên bản HĐH trước, người ta có thể đặt biến môi trường PATH trên toàn hệ thống /etc/launchd.confđể làm cho nó có sẵn cho tất cả các ứng dụng (không chỉ dòng lệnh).

Trong Mavericks, điều này dường như không còn được sử dụng.

Có một kỹ thuật khác để làm điều này trong mavericks?

Câu trả lời:


50

Yosemite

/etc/launchd.confkhông còn được hỗ trợ trong 10.10. Xem man launchctl:

Tệp /etc/launchd.conf không còn được tư vấn để các tiểu ban chạy trong thời gian khởi động sớm; chức năng này đã được gỡ bỏ để xem xét bảo mật.

Bây giờ bạn có thể lưu ví dụ này dưới dạng ~/Library/LaunchAgents/my.startup.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Các launchctl setenvlệnh là ran như người sử dụng, vì vậy nó chỉ áp dụng cho quá trình triển khai trong lĩnh vực sử dụng.

Phương pháp này không áp dụng cho các ứng dụng được mở lại khi đăng nhập nếu "Mở lại cửa sổ khi đăng nhập lại" được chọn.

Mavericks và trước đó

Trong 10.9 trở về trước, bạn có thể chạy

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

và sau đó khởi động lại để áp dụng các thay đổi.

Các phương pháp khác

/etc/paths/etc/paths.d/chỉ áp dụng (hoặc chủ yếu) cho vỏ. Các dòng trong /etc/paths/etc/paths.d/*được thêm vào đường dẫn của path_helper , được điều hành từ /etc/profile, /etc/zshenv/etc/csh.login. Tôi không biết bất kỳ chương trình nào khác ngoài shell sẽ xem xét /etc/pathshoặc /etc/paths.d/.

~/.MacOSX/environment.plist ngừng hoạt động vào 10.8.


2
Vâng; nó chỉ không tồn tại theo mặc định nhưng việc tạo ra nó và thiết lập các mục phù hợp sẽ giúp
mgol

Trên Yosemite, tôi thấy rằng một số chương trình dường như không thấy PYTHONPATH, mà tôi đã đặt trong /etc/launchd.conf và tôi đã sử dụng sửa lỗi dòng lệnh của bạn (đoạn 2 trong câu trả lời của bạn) và nó dường như không hoạt động , nó chỉ cho tôi thông báo trợ giúp / lỗi launchctl.
Tango

@Tango Tôi đã chỉnh sửa câu trả lời. /etc/launchd.confđã được gỡ bỏ trong 10.10.
Lri

Tôi sẽ nói thêm rằng trải nghiệm của tôi, trong khi chơi xung quanh với bash, là vào ngày 10.10, launchctl setenv dường như không làm gì cả. Tôi đã thử thiết lập các biến env, sau đó kiểm tra giá trị bằng echo và chúng vẫn chưa được xác định.
Tango

1
@Tango Thoát và mở lại ứng dụng đầu cuối của bạn sau khi chạy launchctl setenv. launchctl setenvchưa bao giờ ảnh hưởng đến các quy trình hiện có.
Lri

11

Có một cách dễ dàng hơn nhiều. Đặt một tệp văn bản trong thư mục /etc/paths.d/. Trong tệp văn bản này, nhập đường dẫn mong muốn VÀ một dòng mới. Cách tốt nhất là tạo một tệp mới cho mỗi đường dẫn.

Trên hệ thống của tôi, có một tệp có tên MySQL với văn bản '/ usr / local / mysql / bin' và một dòng mới.


Tôi vừa đăng một câu hỏi mới về việc có cách nào để giải quyết điểm yếu được mô tả bởi @LauriRanta.
kuzzooroo

Chỉ là một anacdote: Tôi cũng đã sử dụng phương pháp này, vì nó là "cách OS X" được đề xuất. Tôi đã không gặp nhiều may mắn khi Hệ thống tôn vinh nhất quán các tệp PATH mà tôi có trong /etc/paths.d, và thường kết thúc bằng cách sử dụng lệnh shell shell hoặc đặt PATH của tôi vào ~ / .bash_profile, luôn hoạt động, nếu chỉ cho tài khoản người dùng hiện tại của tôi và không phải toàn hệ thống. Nếu các tệp PATH trong /etc/paths.d luôn hoạt động cho bạn, thì tôi ghen tị vì Hệ thống của bạn hoạt động tốt hơn của tôi;)
chillin

Điều này là mới cho tôi. Tốt đẹp!
CousinCocaine

3

Bạn có thể đặt các biến môi trường trong tệp /etc/launchd-user.conf...

Trong Mavericks, tôi có thể định cấu hình biến môi trường trong tệp bằng cách sử dụng dòng:

setenv TEST test

Sau khi khởi động mới, $TESTtừ /etc/launchd-user.conf được đặt.

Chỉnh sửa

Có thể cú pháp của tệp tại /etc/launchd.conf không hợp lệ. Bạn có thể đăng nội dung của tập tin đó để kiểm tra?

Từ những gì tôi đang thấy, việc đặt biến PATH trong /etc/launchd.conf vẫn hoạt động bình thường. Tuy nhiên, launchdkhông thực hiện bất kỳ mở rộng tham số . Do đó, nếu bạn có một mục như thế setenv PATH $PATH:/usr/local/bin, đường dẫn kết quả của bạn sẽ được đặt thành " $PATH:/usr/local/bin" (lưu ý: không phải giá trị của PATH, mà là văn bản "$ PATH")


Cảm ơn, vấn đề tôi gặp phải là thiết lập PATH, các biến môi trường khác dường như hoạt động.
Tom

@Tom - Tôi đã cung cấp một đề xuất bổ sung ở trên
Eddie Kelley

1
nó thực sự là launch-user.conf hay launch- [current_user_name] .conf
Shanimal

/etc/launchd.conf chứa 'setenv TEST test' không truyền vào Terminal trên Mavericks của tôi.
Dave X

Rất tiếc: s / Mavericks / Yosemite /.
Dave X

0

trên bản cài đặt Mavericks của tôi, việc thêm "setenv PATH blablabla" vào /etc/launchd.conf không hoạt động sau khi khởi động lại

vì vậy tôi đã thêm đường dẫn mới của mình vào cuối / etc / path, hoạt động.


Nó không làm việc cho tôi. Tôi đã khởi động lại, /etc/pathschứa mọi thứ tôi muốn và Sublime vẫn chỉ thấy PATH gốc. Nếu tôi chạy nó từ thiết bị đầu cuối, nó hoạt động.
mgol

Lệnh path_helper trong / etc / profile sử dụng / etc / path và /etc/paths.d để ghi đè bất kỳ PATH nào có thể được đặt bởi /etc/launchd.conf
Dave X

0

Tôi thấy rằng setenv PATH vẫn hoạt động với tôi cho Terminal và các ứng dụng, nhưng đã phá vỡ các tập lệnh shell, được khởi chạy trực tiếp thông qua nhấp chuột hoặc Open With in Terminal từ, giả sử, Finder. Nó rất lạ. Các biến môi trường khác được thiết lập trong /etc/launchd.confcông việc.

Để sửa lỗi cho các kịch bản shell được khởi chạy trực tiếp, tôi đã sao chép cài đặt PATH ~/.bash_profile.


0

Chỉnh sửa /etc/paths.dhoặc sử dụng .bash_profilekhông hiệu quả với tôi, tuy nhiên như được đề xuất từ ​​người khác (tôi thực sự đã đến đây để nêu lên câu trả lời của anh ấy, nhưng tôi không thể tìm lại được?!), Tôi đã chỉnh sửa /etc/pathsnó phù hợp với tôi

Trong trường hợp của tôi, tôi đã thêm công cụ android adbandroidcác lệnh đầu cuối bằng cách trỏ đến các đường dẫn sdk của chúng (hiện adbđã chuyển sang một thư mục khác) trông giống như

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools

0

SWLES, thêm XML đó vào ~ / Library / LaunchAgents / setenv.SVN.plist cho phép BBEdit sử dụng các nhị phân lật đổ mà tôi đã cài đặt trong / opt.

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>

1
Bất kỳ ý tưởng làm thế nào để xác định nếu tập tin này hỗ trợ mở rộng tham số? Tôi có thể đã đặt đường dẫn để một trong / opt là duy nhất. Và tôi nghĩ rằng có khả năng nó KHÔNG hỗ trợ sử dụng $ PATH. Làm thế nào bạn sẽ xác định đường dẫn hiện tại để bắt đầu?
Đánh dấu M

-1

Chỉ cần thêm đường dẫn 'bin' (đường dẫn mà bạn muốn thêm) vào tệp / etc / path - khởi động lại hoặc đăng nhập lại !!!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

lưu tập tin và đăng nhập lại ... hy vọng điều này sẽ giúp

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.