Có một số nơi bạn có thể đặt các biến môi trường.
~/.profile
: sử dụng điều này cho các biến bạn muốn đặt trong tất cả các chương trình được khởi chạy từ thiết bị đầu cuối (lưu ý rằng, không giống như trên Linux, tất cả các shell được mở trong Terminal.app đều là các shell đăng nhập).
~/.bashrc
: điều này được gọi cho các shell không phải là shell đăng nhập. Sử dụng điều này cho các bí danh và những thứ khác cần được xác định lại trong các lớp con, không phải cho các biến môi trường được kế thừa.
/etc/profile
: cái này được tải trước ~ / .profile, nhưng nếu không thì tương đương. Sử dụng nó khi bạn muốn biến áp dụng cho các chương trình đầu cuối được khởi chạy bởi tất cả người dùng trên máy (giả sử họ sử dụng bash).
~/.MacOSX/environment.plist
: cái này được đọc bởi loginwindow khi đăng nhập. Nó áp dụng cho tất cả các ứng dụng, bao gồm cả những ứng dụng GUI, ngoại trừ những ứng dụng được Spotlight khởi chạy trong 10.5 (không phải 10.6). Nó yêu cầu bạn phải đăng xuất và đăng nhập lại để các thay đổi có hiệu lực. Tệp này không còn được hỗ trợ kể từ OS X 10.8.
launchd
Ví dụ người dùng của bạn : điều này áp dụng cho tất cả các chương trình do người dùng, GUI và CLI khởi chạy. Bạn có thể áp dụng các thay đổi bất cứ lúc nào bằng cách sử dụng setenv
lệnh trong launchctl
. Về lý thuyết , bạn sẽ có thể đặt setenv
các lệnh vào ~/.launchd.conf
và launchd
sẽ tự động đọc chúng khi người dùng đăng nhập, nhưng trong thực tế, hỗ trợ cho tệp này không bao giờ được thực hiện. Thay vào đó, bạn có thể sử dụng một cơ chế khác để thực thi tập lệnh khi đăng nhập và có lệnh gọi tập lệnh đó launchctl
để thiết lập launchd
môi trường.
/etc/launchd.conf
: điều này được đọc bởi launchd khi hệ thống khởi động và khi người dùng đăng nhập. Chúng ảnh hưởng đến mọi quy trình đơn lẻ trên hệ thống, vì launchd là quá trình root. Để áp dụng các thay đổi cho launchd gốc đang chạy, bạn có thể chuyển các lệnh vào sudo launchctl
.
Những điều cơ bản cần hiểu là:
- các biến môi trường được kế thừa bởi con của một tiến trình tại thời điểm chúng được rẽ nhánh.
- quá trình root là một cá thể launchd và cũng có một cá thể launchd riêng cho mỗi phiên người dùng.
- launchd cho phép bạn thay đổi các biến môi trường hiện tại bằng cách sử dụng
launchctl
; các biến được cập nhật sau đó được kế thừa bởi tất cả các quy trình mới mà nó tạo ra từ đó trở đi.
Ví dụ về thiết lập biến môi trường với launchd:
echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl
Bây giờ, hãy khởi chạy ứng dụng GUI sử dụng biến và voila!
Để giải quyết vấn đề ~/.launchd.conf
không hiệu quả, bạn có thể đặt đoạn mã sau vào ~/Library/LaunchAgents/local.launchd.conf.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>local.launchd.conf</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>launchctl < ~/.launchd.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Sau đó, bạn có thể đặt setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
bên trong ~/.launchd.conf
, và nó sẽ được thực hiện tại mỗi lần đăng nhập.
Lưu ý rằng, khi đưa một danh sách lệnh vào launchctl theo kiểu này, bạn sẽ không thể đặt các biến môi trường với các giá trị chứa khoảng trắng. Nếu bạn cần làm như vậy, bạn có thể gọi launchctl như sau : launchctl setenv MYVARIABLE "QUOTE THE STRING"
.
Ngoài ra, lưu ý rằng các chương trình khác chạy khi đăng nhập có thể thực thi trước khi khởi chạy và do đó có thể không thấy các biến môi trường mà nó đặt.