Cara mengatur PATH untuk aplikasi yang diluncurkan oleh Finder

70

Aplikasi yang diluncurkan melalui Finder tampaknya tidak menghormati PATH sebagaimana diatur dalam .bash_profile. Jadi ketika saya mencoba menjalankan kode dari IDE (Intellij) saya tidak lagi memiliki akses ke program /usr/local/bin, yang biasanya ditambahkan ke jalur saya di Terminal.

Tampaknya .MacOSX/environment.plist dulu cara untuk melakukan ini, tetapi tidak lagi berfungsi di Lion.

Bagaimana saya bisa mengatur PATHaplikasi yang diluncurkan untuk Finder?

Koma Kafein
sumber
Apakah Anda yakin bahwa solusi yang Anda terima bekerja pada 10.8?
sorin
1
@SorinSbarnea (saya tahu ini sudah tua, tetapi) saya dapat memverifikasi bahwa jawaban yang saat ini diterima bekerja untuk saya di OS X 10.8.3, ketika saya juga menggunakan hack restart restart yang disarankan . (Saya menetapkan variabel lingkungan yang berbeda, tidak $PATHuntuk yang penting.)
Calrion
lihat juga < stackoverflow.com/questions/829749/… >. Ini cukup banyak duplikat.
Philipp Kunz

Jawaban:

38

Jika Anda menggunakan 10.7 dan bukan 10.8, solusi di bawah ini berfungsi dengan baik:

Saya memiliki masalah yang sama dengan gerhana, tetapi sekarang saya telah menambahkan misalnya berikut ini untuk saya .bash_profiledan kemudian berhasil.

export PATH=some_path:another_path
launchctl setenv PATH $PATH

Jika Anda ingin tetap menggunakan jalur asli

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

sebagai gantinya (atau hanya launchctl setenv PATH /my/new/path:$(launchctl getenv PATH)).

Catatan: Mengubah PATH launchctl tidak akan berlaku sampai Dock "restart". Proses Dock baru akan dimulai secara otomatis setelah yang saat ini dimatikan dengan perintah:

killall Dock
Rene Larsen
sumber
1
Saya akhirnya menggunakan: "launchctl setenv PATH $ PATH". Menambahkan path launchctl yang ada melalui "$ p" berakhir mengulangi path setiap kali Anda membuka shell.
Caffeine Coma
4
Ini tidak berfungsi pada OS X 10.8 - dicoba dengan Eclipse dan IntelliJ - lari set|grep PATHdari mereka akan selalu kembaliPATH=/usr/bin:/bin:/usr/sbin:/sbin
sorin
1
Tidak bekerja untuk saya (10.8.1)
nohillside
4
Anda dapat mencoba restart dermaga setelah berjalan launchctl: osascript -e 'tell app "Dock" to quit'. Itu sepertinya memperbaikinya bagi saya.
Ivan Andrus
2
Ini bekerja untuk saya di 10.12, tetapi hanya sebagai salah satu. Setelah menghidupkan ulang mesin, efeknya hilang.
Dover8
19

Untuk menjawab pertanyaan Anda terhadap masalah 'baru' Anda, saya telah memutuskan untuk menulis jawaban lain - karena lebih mudah dijelaskan dengan sampel.

Salah satu cara untuk memuat variabel lingkungan pada startup alat Anda (IDE) pilihan adalah seperti itu dapat dilakukan dengan eclipse - saya pikir harus ada struktur yang serupa di alat Anda (IDE) juga.

Bagaimana hal itu dapat dilakukan di eclipse - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set

(sedikit ditulis ulang tentang variabel lingkungan)

Buat file teks kosong bernama "eclipse.sh" di direktori bundel aplikasi Eclipse /Applications/eclipse/Eclipse.app/Contents/MacOS

Buka eclipse.sh di editor teks dan masukkan konten berikut:

#!/bin/sh

. ~/.bash_profile

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

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

Di Terminal, tentukan flag executable dari skrip shell eclipse.sh, yaitu:

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

Buka Eclipse.app Info.plist dan ubah nilai untuk CFBundleExecutable kunci dari eclipse ke eclipse.sh.

MacOS X tidak secara otomatis mendeteksi bahwa Info.plist Eclipse.app telah berubah. Karena itu Anda perlu memaksa memperbarui database LaunchService di Terminal dengan menggunakan perintah lsregister:

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

Lain kali Anda meluncurkan Eclipse.app dari Dock atau dari Finder variabel lingkungan harus ditetapkan.

Rene Larsen
sumber
+1 untuk penjelasan yang jelas dan akurat, dan untuk fakta bahwa lebih dari enam tahun kemudian, ini masih berfungsi dengan High Sierra, 10.13.x.
dgnuff
16

Pada OS X 10.10 Yosemite, saya menggunakan perintah ini:

sudo launchctl config user path <my path setting>

Ketahuilah bahwa ini menetapkan PATH launchtl untuk semua pengguna . Ini bekerja dengan baik untuk use case saya. Perhatikan bahwa Anda akan diminta untuk mem-boot ulang mesin Anda agar efeknya bertahan.

brki
sumber
Ini tampaknya tidak berpengaruh pada variabel lingkungan PATH dari aplikasi yang dibuka kembali saat login (yang terbuka saat dimatikan).
Brecht Machiels
4
Jawaban ini berhasil untuk saya. Secara khusus, untuk mengakses executable yang dikelola Brew, saya harus sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbindan reboot.
JP
Ini adalah jawaban terbaik di sini untuk menambahkan / usr / local / bin untuk aplikasi berbasis Homebrew. Teman-teman, harap beri suara untuk jawaban ini! Ia bekerja di 10.11 dan 10.12 juga (tidak diuji pada 10.13 sendiri). Tidak perlu dipusingkan environment.plistdalam banyak kasus.
Mark Edington
ini bekerja untuk saya sementara jawaban yang diterima tidak
MichaelChirico
11

Di Mountain Lion semua /etc/pathsdan /etc/launchd.confpengeditan tidak berpengaruh!

Forum Pengembang Apple mengatakan:

"Ubah daftar Info.pl. Sendiri untuk berisi kamus" LSEnvironment "dengan variabel lingkungan yang Anda inginkan.

~ / .MacOSX / environment.plist tidak lagi didukung. "

Jadi saya langsung mengedit aplikasi itu Info.plist(klik kanan pada "AppName.app" (dalam hal ini SourceTree) dan kemudian " Show package contents")

Tampilkan Isi Paket

dan menambahkan pasangan kunci / dikte baru bernama:

<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>

(lihat: Dokumentasi LaunchServicesKeys di Apple )

masukkan deskripsi gambar di sini

sekarang App (dalam kasus saya SourceTree) menggunakan path yang diberikan dan bekerja dengan git 1.9.3 :-)

PS: Tentu saja Anda harus menyesuaikan entri Path dengan kebutuhan path spesifik Anda.

Flori
sumber
Apakah ini benar? Saya melihat banyak posting dengan informasi yang kontradiktif, beberapa di antaranya sudah tua, tetapi beberapa di antaranya baru-baru ini. Saya bahkan tidak memiliki (pada 10.8.2) /etc/launchd.conf. Agaknya, bahkan jika aturan tidak menyatakan bahwa aplikasi harus menggunakan file Info.plist mereka untuk jalur, mereka masih bisa menggunakan file lainnya - /etc/launchd.conf, /etc/paths/, atau /etc/paths.d/*, atau `~ / .MacOSX / environment.plist. Apakah aman untuk mengatakan kemudian bahwa, dalam praktiknya , jalur untuk aplikasi GUI di Mountain Lion dapat disetel di salah satu file ini?
orome
2
Info.plist ini adalah satu-satunya yang bekerja untuk saya, setelah mencoba lauchd.conf, etc / paths dll dengan Maverics dan gerhana saya. Sebenarnya ini tidak langsung bekerja juga, Anda perlu mengingat dua hal: 1. berjalan /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.appseperti yang diberikan dalam jawaban lain, setelah mengubah plist dan 2. menambahkan path lengkap di sana, Anda tidak dapat menggunakan PATH yang ada seperti pada skrip profil Anda.
JaakL
Ini bekerja pada Sierra (10.12). Tetapi masih perlu menjalankan lsregisterperintah, seperti dicatat oleh @ JaakL.
Alastair Harrison
1

On Mountain Lion (10.8.4), $PATHdiperlakukan secara khusus entah bagaimana. launchctl setenv PATH /your/path:/heretidak memiliki efek apa pun pada $PATHinstance Terminal.app atau Emacs.app yang kemudian diluncurkan dari Dock atau dari Finder (sementara launchctl setenv SPONG fooberfungsi dengan baik). Juga $HOME/.launchd.conftidak berfungsi. /etc/launchd.confadalah satu-satunya cara yang saya temukan untuk mengatur PATH dengan benar di mana-mana. Sayangnya, salah satu tidak dapat menggunakan envars seperti $HOMEada, sehingga semua pengguna di laptop saya memiliki /Users/nb/bindi mereka $PATH. Itu hanya saya, jadi saya tidak peduli.

Nick Barnes
sumber
Anda harus menemukan bahwa proses Terminal mengambil PATHnilai yang Anda tetapkan, tetapi: ketika Anda membuat terminal baru itu memulai shell login, yang — jika Anda menggunakan bash — dijalankan /etc/profile, yang menginisialisasi PATHke nilai yang dikembalikan dari /usr/libexec/path_helper. Jika Anda memilih Shell> Perintah Baru ... dan menjalankan env(bukan di shell) Anda harus menemukan bahwa itu PATHadalah nilai yang Anda tetapkan melalui launchd.
Chris Halaman
-1

Coba setel path di ~ / .profile atau ~ / .bash_profile atau ~ / .zprofile Anda (untuk zsh). Ini bekerja untuk saya dengan VimR - tidak membaca PATH ketika diluncurkan dari dermaga, tetapi bekerja ketika diluncurkan dari terminal. Saya sedang menjalankan OSX 10.11.

Saya tidak memiliki pegangan yang cukup baik dalam hal ini untuk memberi Anda penjelasan yang bagus tentang mengapa ia bekerja, ada banyak penjelasan online tentang berbagai file konfigurasi dan apa yang mereka lakukan: https://stackoverflow.com/questions/415403/ whats-the-perbedaan-antara-bashrc-bash-profil-dan-lingkungan

Juga, lihat diskusi serupa di sini: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893 # 24542893

adampasz
sumber
Pertanyaannya menanyakan bagaimana cara melakukannya untuk aplikasi yang diluncurkan dari Doc yang sama dengan peluncuran dari Finder yang menurut Anda jawaban Anda tidak berfungsi - dan kami dapat dengan tepat menjelaskan mengapa itu tidak berfungsi
user151019
-3

Pada Mac OS X 10.8.4, Mountain Lion, lingkungan path menggabungkan jalur yang tercantum dalam file ini:

/etc/paths

Anda dapat mengedit file ini menggunakan alat baris perintah, seperti vimmenggunakan perintah berikut:

sudo vim /etc/paths
pengguna1814739
sumber