$ PATH beni deli ediyor


10

Tamam, bu aptalca bir şeyse özür dilerim, ama fikirlerim bitiyor.

Hedef: Önlerine /usr/local/biniçin$PATH

Sorun: $PATH istediğim veya beklediğim şeyi yapmayacağım

Buraya nasıl geldim: Programlamayı öğrenmeye başlamak istiyorum, bu yüzden kaputun altında rahatça dolaşıyorum, ancak çok fazla deneyimim yok. fishKabuğu (dostça olduğu için) kullanarak kurdum ve homebrewvarsayılan kabuğum (altta system prefs>users & groups>advanced) olarak ayarladım . Bir noktada, brew doctoryüklemelerimin tamamının koşer olup olmadığını görmek için koştum ve sistem kopyasından ziyade kurulumumu kullanabilmem /usr/local/biniçin ön tarafa gitmemi önerdi . Güzel - ama arasında ve benim kontrolüm dışında bir şey oluyordu ve ben asla yolları doğru şekilde ayarlayamadım.$PATHgitpath_helperfish$PATH

Çevre: OSX 10.8.2 ile, 10.7ish yükseltme xcodeve devtools yüklü artı x11, homebrewvefish

Daha çok bilgi: Ben benim kullanıcının varsayılan kabuk geri kurdum bashve aracılığıyla kabukları çeşitli çalıştı terminal.app- bash, fish, sh. Ben /usr/local/binüstüne taşındı /etc/pathsama hiçbir şey değişmedi. Çeşitli config.fishdosyaları baktı ve $ PATH ile karışıklık olabilir şeyler yorumladı, yardımcı olmadı. Aşağıdaki dosyaları var /etc/paths.d/:

./10-homebrew kapsamak /usr/local/bin

./20-fish kapsamak /usr/local/Cellar/fish/1.23.1/bin

./40-XQuartz kapsamak /opt/X11/bin

Eklediğim set +xkardeşime karşı profileve ben başladığında terminal.appben alıyorum:

Last login: Mon Oct  1 13:31:06 on ttys000
+ '[' -x /usr/libexec/path_helper ']'
+ eval '/usr/libexec/path_helper -s'
++ /usr/libexec/path_helper -s PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/Cellar/fish/1.23.1/bin:/opt/X11/bin";
export PATH;
+ '[' /bin/bash '!=' no ']'
+ '[' -r /etc/bashrc ']'
+ . /etc/bashrc
++ '[' -z '\s-\v\$ ' ']'
++ PS1='\h:\W \u\$ '
++ shopt -s checkwinsize
++ '[' Apple_Terminal == Apple_Terminal ']'
++ '[' -z '' ']'
++ PROMPT_COMMAND='update_terminal_cwd; '
++ update_terminal_cwd
++ local 'SEARCH= '
++ local REPLACE=%20
++ local PWD_URL=file://Chriss-iMac.local/Users/c4
++ printf '\e]7;%s\a' file://Chriss-iMac.local/Users/c4 
Chriss-iMac:~ c4$

Yani path_helper çalışıyor gibi görünüyor, ama sonra koşmak echo $PATHbana ağlar /usr/bin:/bin:/usr/sbin:/sbin. Yani, artık path_helpergerekeni yapmıyor bile?

Eminim burada anlamadığım bazı iyi tanımlanmış davranışlar vardır, ya da düzeltmeye çalışırken bir şeyle uğraştım. Lütfen yardım et!


not, ile fisholuşturarak çalışmak için alabilirsiniz ama hala görünüşe göre olması gerektiği gibi çalışmıyor ve böylece eksik olma sorunu var . Ayrıca , komut dosyaları, ~/.config/fish/config.fishset PATH /usr/local/bin $PATHpath_helper$PATH$PATH
GUI'den

Yanıtlar:


5

çözüm:

Sistem genelinde bir ayar mı yoksa bir kullanıcı yapılandırması mı yoksa uygun yapılandırma dosyasını mı düzenlemek istediğinizi seçin, path_helper'ı balıkla kullanmayın.

Daha

balık, / etc / profilini kaynak yapmaz, sistem geneli ve kullanıcı yapılandırması için sırasıyla /etc/fish/config.fish ve ~ / .config / fish / config.fish [1] 'i okuyacaktır.

path_helper, sistem çapında bir profil dosyası (sh, csh ve türevleri) sağlayan kabuklar için kullanılır. 10.7 path_helper / etc / paths içindeki düzeni onurlandırdığı için, 10.6'da yoktu AFAIR ve başa çıkmak daha zordu.

Path_helper'ı gerçekten balıkla kullanmak istiyorsanız, çıktısını ayrıştırmanız gerekir, çünkü yalnızca -s ve -c seçenekleriyle sh ve csh sözdizimi sağlar .

Gibi bir şey

/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g'

işi yapmalı:

[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization


Harika! Şu anda sahip olduğum şey bu: if status --is-login eval (/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g') end- burada balık 2 ve Mac OS
10.8.3

3

/Etc/paths.d, path_helper & c. Hakkında kesinlikle hiçbir fikrim yok, hepsi benim için aşırı komplikasyonlar gibi görünüyor, ancak ~ / .bashrc'nizin sonunda aşağıdakiler doğru olmalı:

 PATH=/usr/local/bin:$PATH

Bu yardımcı olur umarım!


Teşekkürler Aaron - path_helpersözde ve sonra $PATHokuyarak girişte ayarlar OSX özgü bir yardımcı programdır . Her neyse, önerinin beni düzeltmesi gerektiğini anlıyorum , ama aslında çalışmasını istiyorum (ve sistemde sürekli olarak, beklemek için çok fazla değilse). /etc/paths/etc/paths.d/*bashfish
Chris4d

Ah - bunun için üzgünüm. Ben bir OS X kullanıcısı değilim, daha fazla yazık, ama biraz Google dayak biraz bu Yığın Taşması sorusu daha sonra gibi olabilir gibi görünüyor - yine, ben değilim OS X kullanıcısı kendim ve sadece yanıt verdi çünkü sorunuza hızlı bir şekilde (okundu: dikkatsiz) bakmak beni sadece bash ile ilgilendiğinizi düşündürdü, bu yüzden tavsiyemi buraya birkaç tuz taneleri ile alın. Umarım yardımcı olur, hepsi aynı -
Aaron Miller

3

Aaron'a yanıt verdikleri ve stackexchange sitelerinde benzer soruları yanıtlayan herkes için teşekkürler. Gelecek kuşak için anladım:

  1. path_helper/etc/profilesözdizimiyle eval '/usr/libexec/path_helper -s'(kesme işaretlerinin gerçekte ters tırnak olduğu) çağrılır . Bir kukla gibi, backticks'in nasıl çalıştığını bilmiyordum ve bu yüzden onları bir nedenden dolayı tırnak işareti olarak değiştirmişti. Bu benim kırdı profileyüklenmesini path_helper. Arka keneler değiştirildi ve şimdi olması gerektiği gibi çalışıyor (elbette).
  2. kullanarak set PATH /usr/local/bin $PATHbenim de ~/.config/fish/profile.fishteminat altın benim tercih kabuğunda doğru sipariş almak, ama sürece bu path_helperişlerin gereksiz olabilir.
  3. $PATHKomut dosyasının komut dosyaları, GUI uygulamaları vb. İçin kullanılabilir olmasını sağlamak için, launchd.confve environment.plist... arasında hala bir araştırma gibi görünüyor.

1
Geçen gün okudum (ancak kaynağı hatırlamıyorum), 10.8'in artık tüm uygulamalar tarafından görülebilir bir yol elde etmek için kesin bir yol sunmadığını. Özellikle environment.plist'in artık okunmadığını hatırlıyorum; Launchd.conf'un belirsiz bir şekilde farkındayım, bu yüzden işe yarayabilir, ancak makalenin işe yaramayacağını düşünüyorum.
echristopherson

1
daha fazla takip: path_helper balıklarda hiç işe yaramaz gibi görünmüyor; ikisi de uyumsuz olan csh veya bash sözdizimi üretir. Bunun yerine, ~ / .config / fish / config.fish (balık başlangıç ​​komut dosyası) 'nı /etc/paths.d/*' ye katmak ve $ PATH 'a ekleyebilirsiniz. Umarım birine yardım eder!
Chris4d

cevabımı bile okudun mu?
takipinizden
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.