Các biến môi trường hệ thống được đặt ở đâu trong Mountain Lion?


46

Trong Lion (và các phiên bản trước) nó đã ở trong .MacOSX/environment.plist. Sau khi nâng cấp lên 10.8, tệp vẫn ở đó, nhưng các biến không lấy.

Tôi cũng đã thử thêm chúng vào /etc/launchd.confvà chúng sẽ hiển thị trong Terminal, nhưng không hiển thị các ứng dụng GUI (như IDE của tôi).


Bạn đã khởi động lại sau khi thay đổi /etc/launchd.conf?
nohillside

Tôi đã làm và tất cả các biến trong đó hiện có sẵn trong bất kỳ thiết bị đầu cuối nào, nhưng không có trong IDE của tôi.
Felix

Có lẽ IDE không phơi bày môi trường cho bạn (Xem câu trả lời của tôi )? IDE là gì? nó được ra mắt trực tiếp bởi Finder hay Spotlight?
halloleo

Câu trả lời:


22

Tôi cũng đã hỏi câu hỏi này trên Diễn đàn nhà phát triển của Apple và nhận lại câu trả lời chính thức này.

Thay đổi Info.plist của chính .app để chứa từ điển "LSEn Môi trường" với các biến môi trường bạn muốn.
~ / .MacOSX / môi trường.plist không còn được hỗ trợ.


2
Nơi đó nằm ở đâu?
orome

Nó sẽ hữu ích để cung cấp một liên kết đến một ví dụ cụ thể hơn.
Blaisorblade

1
Cập nhật: Tôi đã thử thay đổi tệp đó, sau khi tìm ra cú pháp (tôi nghĩ), nhưng nó hoàn toàn không hoạt động với tôi.
Blaisorblade

4
Sẽ có một Info.plist cho mỗi ứng dụng trong WhatEver.app/Content/Info.plist. Bạn có thể chỉnh sửa nó bằng XCode. Nhấp vào "+" trên Danh sách tài sản thông tin và thêm từ điển có tên LSEn Môi trường. Nếu bạn gõ chính xác, nó sẽ đổi tên thành biến môi trường. Sau đó, bạn nhấp vào "+" theo đó cho từng biến môi trường bạn muốn thêm.
Felix

2
Đây là một giải pháp tốt, nhưng nó không còn hoạt động kể từ Yosemite 10.10.5.
Dalmazio

21

Tôi biết đây là một câu hỏi cũ nhưng tôi nghĩ rằng tôi sẽ chỉ ra rằng ở Yosemite /etc/launchd.confkhông còn hoạt động nữa (như được xác nhận bởi trang nam). Vì vậy, đây là một thay thế.

Khởi chạy AppleScript Editor, nhập một lệnh như thế này:

do shell script "launchctl setenv variablename value"

(thêm bao nhiêu dòng tùy thích)

Bây giờ lưu (⌘S) dưới dạng Định dạng tệp: Ứng dụng . Cuối cùng mở Cài đặt hệ thốngNgười dùng & NhómMục đăng nhập và thêm ứng dụng mới của bạn.


Lưu ý rằng nó có thể cũng không hoạt động với các ứng dụng khác được mở dưới dạng các mục Đăng nhập và có lẽ những ứng dụng bạn mở nhanh sau khi đăng nhập
user151019

Điều này làm việc cho tôi. Cảm ơn bạn rất nhiều. Điều này đã được lái xe điên cả ngày!
wholladay

2
Có vẻ như là giải pháp thực sự và phổ quát duy nhất cho đến nay. Nhưng nó cần thêm 9 lần nâng cấp để đi lên và trở thành câu trả lời đầu tiên. : c
Sange Borsch

Điều này làm việc cho tôi trên El Capitan. Như @Mark đã lưu ý ở trên, có vấn đề với việc đặt hàng (ví dụ: các ứng dụng được tiếp tục có thể có hoặc không có môi trường), nhưng một khi đã đăng nhập vào hoạt động này như bạn mong đợi. Đó là, các ứng dụng bắt đầu từ Spotlight hoặc Dock có môi trường chính xác.
Alec Thomas

@Mark Bạn có thể thử câu trả lời này , sử dụng Launch Agent. Trong trường hợp của tôi, Tác nhân khởi động bắt đầu sau các Mục đăng nhập, vì vậy tôi di chuyển ứng dụng đích (như Eclipse) từ Mục đăng nhập sang Tác nhân khởi động, để chúng sẽ được khởi động sau khi biến môi trường cài đặt ứng dụng đặc biệt này.
Franklin Yu

10

Như bạn đã phát hiện ra, việc sử dụng tệp môi trường.plist không còn được theo dõi, các biến được lưu trữ trong Info.plist dưới dạng chuỗi LSEn môi trường chỉ được đặt bởi launchd .

Bạn không thể phụ thuộc vào chúng để đặt biến môi trường chung mà thiết bị đầu cuối sẽ đặt nếu bạn gọi chương trình của mình từ thiết bị đầu cuối / shell trực tiếp. Tin tốt là open -alệnh kích hoạt launchd để thực hiện khởi chạy, vì vậy các biến sẽ được đặt nhất quán cho môi trường ứng dụng nếu không phải cho môi trường shell cục bộ.


4

Đặt các biến môi trường /etc/launchd.conflà cách tốt nhất: Mọi ứng dụng được khởi chạy sau khi khởi động lại bằng shell cục bộ, Finder hoặc Spotlight đều thừa hưởng các biến này - Tôi đã thử nghiệm rộng rãi điều này với Mountain Lion 10.8.3.

2 hãy cẩn thận:


1
/etc/launchd.confkhông còn được hỗ trợ kể từ Yosemite. Xem apple.stackexchange.com/questions/106355/ Kẻ
Franklin Yu

3

Hãy thử launchctl setenv NAME VALUE. Tôi không biết nếu / nó làm gì khác với chỉnh sửa launchd.conf, nhưng nó hoạt động với tôi trong cả ứng dụng Terminal và GUI. Thêm chi tiết.

Lưu ý điều này không tồn tại qua khởi động lại. Đây là một cách để khắc phục điều đó .


3
Đó là một trang khá dài mà bạn đang liên kết đến đây. Trường hợp chính xác là phần có liên quan? Bạn có thể đưa nó trực tiếp vào câu trả lời của bạn để giúp mọi người dễ dàng hơn không?
nohillside

2
Rất tiếc, điểm tốt, tôi nghĩ rằng tôi đã bao gồm nhiều đoạn hơn trong url đó. đã sửa.
ryan

1
Cách để tồn tại trong quá trình khởi động lại được cung cấp ở đó sử dụng môi
trường.plist
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.