Trong Mountain Lion, làm cách nào để đặt, ở một nơi, biến môi trường PATH cho tất cả các ứng dụng mới được khởi chạy?


9

Khi hỏi Khác nhau, có nhiều câu hỏi liên quan đến PATHbiến môi trường và cách đặt nó cho các ứng dụng được khởi chạy bởi shell, bằng spotlight hoặc thông qua công cụ tìm (câu hỏi điển hình: Cách đặt PATH cho các ứng dụng do Finder khởi chạy hoặc Cách thay đổi biến môi trường PATH. .. ).

Câu trả lời nằm trong khoảng từ shkịch bản khởi động để /etc/pathsvào /etc/launchd.conf. Tôi đang ở đây sau câu trả lời cho một cài đặt thống nhấtPATH cho tất cả các ứng dụng trong Mac OS X Mountain Lion 10.8.2.

Câu trả lời:


14

Sau nhiều thử nghiệm với các lựa chọn khác nhau, tôi kết luận:

cách nào thống nhất để thiết lập PATHcho các ứng dụng được khởi chạy bằng các phương tiện khác nhau (như shell script, Finder và Spotlight) không? Vâng, có và không:

  • Không : Cài đặt PATHtrong shell script khởi động (ví dụ .bashrc) chỉ hoạt động cho các ứng dụng được khởi chạy bởi shell.
  • Không : Cài đặt PATHcho launchdquy trình hiện tại thông qua launchctl setenv PATH <...>không hoạt động đối với tôi.
  • : Thiết lập PATHtrong /etc/launchd.conf(và khởi động lại hệ thống) sẽ làm cho thích hợp PATHcó thể nhìn thấy trong các ứng dụng đưa ra bởi Spotlight, Dock và Finder và sau đó vỏ (địa phương).
  • Không : Vỏ được gọi từ xa không kế thừa môi trường. (Xem ... tại sao shell từ xa thông qua ssh KHÔNG kế thừa môi trường .. )

Lưu ý khi thiết lập đạn pháo:

  1. Để hoạt động chính xác trong các shell cục bộ, điều quan trọng là tắt sử dụng /usr/libexec/path_helper, bởi vì các đường dẫn mặc định trong /etc/pathscó thể thay đổi thứ tự của các đường dẫn trong PATH. **

  2. Để chứa shell từ xa, bạn cần nhập lại launchdmôi trường vào shell. Sử dụng một cái gì đó như thế này trong .bashrc:

# the vexatious path stuff
eval $(launchctl export)

Hậu quả đáng tiếc của toàn bộ vấn đề là:

  • Không có cách nào để có các cài đặt hợp nhất này trên cơ sở cho mỗi người dùng. ( ~/.launchd.confkhông hoạt động.)
  • Không có cách dễ dàng để xây dựng PATH từ các nguồn khác nhau bằng các kỹ thuật như mở rộng thư mục nhà et al.

Cập nhật: Thiết PATH qua /etc/launch.confkhông không làm việc cho vỏ đăng nhập vào từ xa qua ssh (tôi giả sử vì sshdkhông vượt qua môi trường xung quanh nó được thừa hưởng từ cha mẹ của nó launchdvào vỏ con.). - Tôi sẽ chỉnh sửa câu trả lời cho phù hợp.
halloleo

Trả lời cập nhật với một giải pháp cho vỏ từ xa.
halloleo

1
Câu trả lời chính xác; Bạn có thể đơn giản hóa việc tìm nguồn cung ứng của môi trường launchd như sau : eval "$(launchctl export)".
mkuity0

Một cách dễ dàng để chỉnh sửa /etc/launchd.conflà chỉ chạy sudo -e /etc/launchd.conf(nếu bạn quen thuộc với vi) hoặc EDITOR=nano sudo -e /etc/launchd.conf(nếu bạn thích trình chỉnh sửa không theo chế độ).
nohillside

3

Mở rộng câu trả lời trước , để thay đổi đường dẫn trong /etc/launchd.conf, bạn sẽ cần làm như sau.

  1. Đảm bảo bạn có đặc quyền Quản trị viên.

  2. Tạo một tệp văn bản mới với nội dung sau, được sửa đổi để phù hợp với nhu cầu của bạn:

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. Lưu nó trong thư mục nhà của bạn như launchd.conf.

  4. Mở Terminal.app (hoặc thay thế yêu thích của bạn) và gõ:

    sudo mv ~/launchd.conf /etc

    Tùy thuộc vào cách sử dụng sudolệnh trước đây của bạn, bạn có thể nhận được một thông báo "cẩn thận làm những gì bạn đang làm", nhưng bằng cách nào đó bạn sẽ cần nhập mật khẩu của mình. Tất cả các lệnh thực hiện là di chuyển tệp vào /etcthư mục, ví dụ không thể truy cập trực tiếp khi lưu tệp trong TextEdit. sudo(viết tắt của "Super User DO") được sử dụng vì cần có đặc quyền của Quản trị viên để ghi vào thư mục đó.

  5. Khởi động lại máy tính của bạn.

Và bạn nên được thiết lập tất cả. Chúc may mắn!


Cảm ơn về các chi tiết, nhưng câu hỏi không phải là về cách sửa đổi launchd.conf, mà là về cách tất cả các ứng dụng có cùng biến PATH theo cách thống nhất.
halloleo

Đúng, nhưng ban đầu tôi đã tìm kiếm câu hỏi cố gắng tìm ra cách thiết lập các PATHứng dụng GUI của mình và tôi đã tìm ra cách giúp đỡ những linh hồn tội nghiệp nào có thể không biết cách thực hiện thay đổi ...
MattDMo

Bạn có một điểm hợp lệ ở đây; Tuy nhiên, tôi nghĩ rằng tích hợp thông tin của bạn trong câu trả lời là lựa chọn tốt hơn. - Tôi nghĩ chủ đề bình luận này trở thành một cuộc thảo luận về meta, vì vậy tôi đã mở nó trên meta.stackoverflow như là phải làm gì với một câu trả lời bổ sung ...
halloleo

1
trên thực tế, điều này không nên có trên meta.apple.stackexchange.com?
MattDMo

Thật vậy, meta.apple.stackexchange.com sẽ là nơi chính xác. Tôi chỉ không biết rằng nó tồn tại ...
halloleo

-2

Bạn có thể thử https://github.com/ersiner/osx-env-sync .

Nó xử lý cả dòng lệnh và ứng dụng GUI từ một nguồn duy nhất . Và nó hoạt động với phiên bản OS X (Yosemite) mới nhất.


Mà chỉ tự động hóa câu trả lời khác bằng cách sử dụng bit mà anh ta nói không hoạt động, ví dụ: launchctl setenv PATH <...>
user151019

@Mark Điều này không liên quan gì đến việc tự động hóa các bước của câu trả lời ở đây. Cái này sử dụng Launch Agent. Tôi đề nghị bạn hãy thử xem.
Ersin Er

Các giải pháp được chấp nhận sử dụng launchdhệ thống quá. Giải pháp của bạn có các vấn đề tương tự như đã nêu trong câu trả lời được chấp nhận.
halloleo

@halloleo Bạn đã thực sự thử chưa? Và trên phiên bản OS X nào?
Ersin Er
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.