Sau nhiều thử nghiệm với các lựa chọn khác nhau, tôi kết luận:
Có cách nào thống nhất để thiết lập PATH
cho 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
PATH
trong 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
PATH
cho launchd
quy trình hiện tại thông qua launchctl setenv PATH <...>
không hoạt động đối với tôi.
- Có : Thiết lập
PATH
trong /etc/launchd.conf
(và khởi động lại hệ thống) sẽ làm cho thích hợp PATH
có 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:
Để 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/paths
có thể thay đổi thứ tự của các đường dẫn trong PATH
. **
Để chứa shell từ xa, bạn cần nhập lại launchd
mô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.conf
khô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.
/etc/launch.conf
không không làm việc cho vỏ đăng nhập vào từ xa qua ssh (tôi giả sử vìsshd
không vượt qua môi trường xung quanh nó được thừa hưởng từ cha mẹ của nólaunchd
vào vỏ con.). - Tôi sẽ chỉnh sửa câu trả lời cho phù hợp.