Cách đặt PATH cho các ứng dụng khởi chạy Finder


70

Các ứng dụng được khởi chạy thông qua Finder dường như không tôn trọng PATH như được đặt trong .bash_profile. Vì vậy, khi tôi cố chạy mã từ IDE (Intellij), tôi không còn có quyền truy cập vào các chương trình /usr/local/bin, thường được thêm vào đường dẫn của tôi trong Terminal.

Rõ ràng đã .MacOSX/environment.plist từng là cách để làm điều này, nhưng nó không còn hoạt động trong Lion.

Làm cách nào tôi có thể thiết lập các PATHứng dụng khởi chạy Finder?


Bạn có chắc chắn rằng giải pháp được chấp nhận của bạn hoạt động vào ngày 10.8?
sorin

1
@SorinSbarnea (Tôi biết điều này đã cũ, nhưng) Tôi có thể xác minh rằng câu trả lời hiện được chấp nhận hoạt động với tôi trên OS X 10.8.3, khi tôi cũng sử dụng hack khởi động lại được đề xuất . (Tuy nhiên, tôi đang đặt một biến môi trường khác nhau, không phải $PATHtrong trường hợp quan trọng.)
Calrion

xem thêm < stackoverflow.com/questions/829749/ khăn >. Nó là khá nhiều một bản sao.
Philipp Kunz

Câu trả lời:


38

Nếu bạn ở trên 10.7 chứ không phải 10.8, giải pháp bên dưới hoạt động tốt:

Tôi có cùng một vấn đề với nhật thực, nhưng bây giờ tôi đã thêm ví dụ như sau đây .bash_profilevà sau đó nó đã hoạt động.

export PATH=some_path:another_path
launchctl setenv PATH $PATH

Trong trường hợp bạn muốn giữ nguyên đường dẫn ban đầu, hãy sử dụng

p=$(launchctl getenv PATH)
launchctl setenv PATH /my/new/path:$p

thay vào đó (hoặc chỉ launchctl setenv PATH /my/new/path:$(launchctl getenv PATH)).

Lưu ý: Thay đổi launchctl PATH sẽ không có hiệu lực cho đến khi Dock được "khởi động lại". Một tiến trình Dock mới sẽ tự động bắt đầu sau khi lệnh hiện tại bị hủy bằng lệnh:

killall Dock

1
Tôi đã kết thúc bằng cách sử dụng: "launchctl setenv PATH $ PATH". Áp dụng đường dẫn launchctl hiện có thông qua "$ p" sẽ kết thúc việc lặp lại đường dẫn mỗi khi bạn mở shell.
Caffeine Hôn mê

4
Điều này không hoạt động trên OS X 10.8 - đã thử với Eclipse và IntelliJ - chạy set|grep PATHtừ chúng sẽ luôn quay trở lạiPATH=/usr/bin:/bin:/usr/sbin:/sbin
sorin

1
Không hoạt động cho một trong hai (10.8.1) của tôi
nohillside

4
Bạn có thể thử khởi động lại dock sau khi chạy launchctl: osascript -e 'tell app "Dock" to quit'. Điều đó dường như để sửa chữa nó cho tôi.
Ivan Andrus

2
Điều này làm việc cho tôi trong 10.12, nhưng chỉ là một trong số đó. Sau khi khởi động lại máy, các hiệu ứng bị mất.
Dover8

19

Để trả lời câu hỏi của bạn cho vấn đề 'mới' của bạn, tôi đã quyết định viết một câu trả lời khác - bởi vì nó dễ giải thích hơn với các mẫu.

Một cách để tải các biến môi trường khi khởi động công cụ (IDE) của bạn giống như có thể được thực hiện với nhật thực - Tôi nghĩ rằng cũng phải có một cấu trúc tương tự trong công cụ (IDE) của bạn.

Làm thế nào nó có thể được thực hiện trong nhật thực - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-envir-variabled-set

(viết lại một chút về các biến môi trường)

Tạo một tệp văn bản trống có tên "eclipse.sh" trong thư mục gói ứng dụng Eclipse /Applications/eclipse/Eclipse.app/Contents/MacOS

Mở eclipse.sh trong trình soạn thảo văn bản và nhập các nội dung sau:

#!/bin/sh

. ~/.bash_profile

logger "`dirname \"$0\"`/eclipse"

exec "`dirname \"$0\"`/eclipse" $@

Trong Terminal, đặt cờ thực thi của tập lệnh shell eclipse.sh, tức là:

chmod +x /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.sh

Mở Eclipse.app Info.plist và thay đổi giá trị cho khóa CFBundleExecutable từ nhật thực sang nhật thực.

MacOS X không tự động phát hiện ra rằng Info.plist của Eclipse.app đã thay đổi. Do đó, bạn cần buộc cập nhật cơ sở dữ liệu LaunchService trong Terminal bằng cách sử dụng lệnh lsregister:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app

Lần tới khi bạn khởi chạy Eclipse.app từ Dock hoặc từ Finder, các biến môi trường sẽ được đặt.


+1 cho một lời giải thích rõ ràng và chính xác, và thực tế là hơn sáu năm sau, điều này vẫn hoạt động với High Sierra, 10.13.x.
thức

16

Trên OS X 10.10 Yosemite, tôi đã sử dụng lệnh này:

sudo launchctl config user path <my path setting>

Hãy lưu ý rằng anh ấy thiết lập launchtl PATH cho tất cả người dùng . Điều này làm việc tốt cho trường hợp sử dụng của tôi. Lưu ý rằng bạn sẽ được yêu cầu khởi động lại máy để giữ hiệu ứng.


Điều này dường như không có ảnh hưởng đến biến môi trường PATH của các ứng dụng được mở lại khi đăng nhập (được mở khi tắt).
Brecht Machiels

4
Câu trả lời này đã làm việc cho tôi. Cụ thể, để truy cập chương trình thực thi do Bia quản lý, tôi phải sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinkhởi động lại.
JP

Đây là câu trả lời tốt nhất ở đây để thêm / usr / local / bin cho các ứng dụng dựa trên Homebrew. Mọi người hãy bỏ phiếu cho câu trả lời này! Nó cũng hoạt động trong 10.11 và 10.12 (không được thử nghiệm trong bản 10.13). Không cần phải lộn xộn environment.plisttrong hầu hết các trường hợp.
Đánh dấu Edington

điều này làm việc cho tôi trong khi câu trả lời được chấp nhận thì không
MichaelChirico

11

Trên Mountain Lion tất cả /etc/paths/etc/launchd.confchỉnh sửa không có hiệu lực!

Diễn đàn nhà phát triển của Apple cho biết:

"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ợ. "

Vì vậy, tôi đã trực tiếp chỉnh sửa ứng dụng Info.plist(nhấp chuột phải vào "AppName.app" (trong trường hợp này là SourceTree) và sau đó " Show package contents")

Xem Nội dung đóng gói

và thêm một cặp khóa / dict mới gọi là:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(xem: Tài liệu LaunchServiceKeys tại Apple )

nhập mô tả hình ảnh ở đây

bây giờ Ứng dụng (trong trường hợp của tôi là SourceTree) sử dụng đường dẫn đã cho và hoạt động với git 1.9.3 :-)

PS: Tất nhiên bạn phải điều chỉnh mục Đường dẫn theo nhu cầu đường dẫn cụ thể của mình.


Điều này có đúng không? Tôi thấy rất nhiều bài viết với thông tin mâu thuẫn, một số trong đó rõ ràng là cũ, nhưng một số trong đó có vẻ gần đây. Tôi thậm chí không có (vào ngày 10.8.2) /etc/launchd.conf. Có lẽ, ngay cả khi các quy tắc không nêu rằng các ứng dụng cần sử dụng file Info.plist của họ đối với con đường, họ vẫn có thể được sử dụng các file khác - /etc/launchd.conf, /etc/paths/hay /etc/paths.d/*, hoặc `~ / .MacOSX / environment.plist. Có an toàn không khi nói rằng, trên thực tế , các đường dẫn cho ứng dụng GUI trong Mountain Lion có thể được đặt trong bất kỳ tệp nào trong số này?
orome

2
Info.plist này là thứ duy nhất hoạt động với tôi, sau khi thử lauchd.conf, v.v / đường dẫn v.v ... với Maverics và nhật thực của tôi. Trên thực tế, điều này cũng không hoạt động ngay lập tức, bạn cần nhớ hai điều: 1. chạy /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.appnhư được đưa ra trong một câu trả lời khác, sau khi thay đổi số nguyên và 2. thêm đường dẫn đầy đủ vào đó, bạn không thể sử dụng PATH hiện có như trong tập lệnh hồ sơ của mình.
JaakL

Điều này hoạt động trên Sierra (10.12). Nhưng vẫn cần phải chạy lsregisterlệnh, như đã lưu ý bởi @JaakL.
Alastair Harrison

1

Trên Mountain Lion (10.8.4), $PATHđược đối xử đặc biệt bằng cách nào đó. launchctl setenv PATH /your/path:/herekhông có bất kỳ ảnh hưởng nào đến các phiên bản $PATHTerminal.app hoặc Emacs.app sau đó được khởi chạy từ Dock hoặc từ Finder (trong khi launchctl setenv SPONG foohoạt động tốt). Cũng $HOME/.launchd.confkhông hoạt động. /etc/launchd.conflà cách duy nhất tôi tìm thấy để đặt PATH chính xác ở mọi nơi. Thật không may, chúng ta không thể sử dụng envars như $HOMEở đó, vì vậy tất cả những người sử dụng trên máy tính xách tay của tôi có /Users/nb/bintrên họ $PATH. Đó chỉ là tôi, vì vậy tôi không quan tâm.


Bạn sẽ thấy rằng quá trình Terminal chọn ra PATHgiá trị bạn đã đặt, nhưng: khi bạn tạo một thiết bị đầu cuối mới, nó sẽ khởi động một vỏ đăng nhập, mà nếu bạn đang sử dụng bash thì thực thi /etc/profile, nó khởi tạo PATHgiá trị được trả về /usr/libexec/path_helper. Nếu bạn chọn Shell> Lệnh mới và chạy env(không phải trong trình bao), bạn sẽ thấy đó PATHlà giá trị bạn đặt qua launchd.
Chris Trang

-1

Hãy thử đặt đường dẫn trong ~ / .profile hoặc ~ / .bash_profile hoặc ~ / .zprofile (cho zsh). Điều này làm việc với tôi với VimR - nó không đọc PATH khi được phóng từ dock, nhưng nó hoạt động khi được phóng từ thiết bị đầu cuối. Tôi đã chạy trên OSX 10.11.

Tôi không có đủ khả năng xử lý vấn đề này để cung cấp cho bạn một lời giải thích tuyệt vời về lý do tại sao nó hoạt động, có rất nhiều lời giải thích trực tuyến về các tệp cấu hình khác nhau và những gì chúng làm: https://stackoverflow.com/questions/415403/ whats-the-sự khác biệt giữa bashrc-bash-profile-và-môi trường

Ngoài ra, hãy xem một cuộc thảo luận tương tự ở đây: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893 # 24542893


Câu hỏi hỏi làm thế nào để làm điều đó cho các ứng dụng được khởi chạy từ Doc, giống như khởi chạy từ Finder mà bạn nói câu trả lời của bạn không hoạt động - và chúng tôi có thể giải thích chính xác lý do tại sao nó không / không hoạt động
user151019

-3

Trên Mac OS X 10.8.4, Mountain Lion, môi trường đường dẫn kết hợp các đường dẫn được liệt kê trong tệp này:

/etc/paths

Bạn có thể chỉnh sửa tệp này bằng công cụ dòng lệnh, chẳng hạn như vimsử dụng lệnh sau:

sudo vim /etc/paths
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.