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 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.
- Có : 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:
Để 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. **
Để 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.
/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.