Unix tarafından keşfedilecek giriş dizini yolu nasıl eklenir?


12

Ben yüklemiş node.jsözel yerde ve konumu ekledi $PATHiçinde .profiledosyasına.

$ node --version
v0.6.2
$ which node
$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:~/Unix/homebrew/bin
$ cat ~/.profile
export  PATH="$PATH:~/Unix/homebrew/bin"

Node.js'nin kendisi iyi çalışır. Sorun whichkomut tarafından listelenmemiş olmasıdır . Şimdi kuramıyorum npm. Çünkü npmyükleme konumu bulamıyor node.js. nodeİkili tarafından nasıl keşfedilir which?

Yanıtlar:


11

Bu, ~genişlemediği için oluyor . Kabuğunuz bununla nasıl başa çıkacağını bilir, ancak whichbunu yapmaz (diğer programların çoğunu da yapmaz). Bunun yerine şunları yapın:

export "PATH+=:$HOME/Unix/homebrew/bin"

Alternatif olarak, kullanmayı bırakın whichve (neredeyse her zaman üstün) kullanın type -p.

İşte sorunun bir gösterimi:

$ echo "$PATH"
/usr/local/bin:/usr/bin:/bin
$ export "PATH+=:~/git/yturl"
$ yturl
Usage: yturl id [itag ...]
$ which yturl
$ type -p yturl
/home/chris/git/yturl/yturl
$ export "PATH=/usr/local/bin:/usr/bin:/bin:$HOME/git/yturl"
$ which yturl
/home/chris/git/yturl/yturl

Bakan diğer bazı programların ikisinin $PATHde anlamını anlamayabileceğini ~ve bunu göreceli bir yolun parçası olarak alabileceğinizi unutmayın. Kullanımı daha taşınabilir $HOME.


1
Önerilen çözüm işe yararken açıklama yanlıştır. whichburada hatalı değildir; ~tanımında genişletilmiş olması gerekirdi PATH. Bash'da ~zaten genişleyen bir tuhaflık var PATH, bu yüzden iki yanlış bir tür doğru yapıyor.
Gilles 'SO- kötü olmayı bırak'

@Gilles Bu söylediğimden nasıl farklı?
Chris Down

Bunun alıntılananla hiç ~çalışmaması bir bash garipliğidir. Bu değişmez olması ~in $PATHorada kendi bölme yapmak programlardır çünkü satır aşağı neden sorun muhtemeldir $PATHve tedavi etmeyin ~özel.
Gilles 'SO- kötü olmayı bırak'

@Gilles ... ve bu son paragrafımda söylediğimden nasıl farklı?
Chris Down

1
Teknik olarak “başka bir programın… anlamını anlayamayabileceği” doğru olsa da ~, cezanız yanıltıcıdır. Bu bağlamda $PATH, bu bash dışındaki her programdır.
Gilles 'SO- kötü olmayı bırak'

18

İçindeki bu çizgi .profileşunlardan biri olmalı

export  PATH="$PATH:$HOME/Unix/homebrew/bin"
PATH="$PATH:$HOME/Unix/homebrew/bin"
PATH=$PATH:$HOME/Unix/homebrew/bin
PATH=$PATH:~/Unix/homebrew/bin

~Bir kelimenin ilk karakteri olduğunda karakter yalnızca ana dizine genişletilir ve tırnak içine ediyor. Yazdıklarınızda, ~çift ​​tırnak işaretleri arasındadır ve bu nedenle genişlemez. Yazmış olsanız bile export "PATH=$PATH:"~/Unix/homebrew/bin, ~genişletilmez çünkü kabuk kelimesinin başında değildir.

PATHBenzer değişkenler için değerler yazmayı amaçlayan özel bir dağıtım vardır . Eğer ~sadece eğer bir atama ya da işaretleri olduğunu eşittir işaretinden sonra ise ~sadece sonradır :bir atamanın sağ tarafında, daha sonra Genişletilmişse. Sadece düz ödevler bu dağıtımı içerir, export PATH=…sayılmaz ( exportbir =karakter içeren bir argümana sahip olan yerleşik çağrıdır ).

Burada, PATHzaten dışa aktarıldığından dışa aktarmanıza gerek yoktur . exportBir değişkenin değerini değiştirdiğinizde aramanız gerekmez (OSX veya Linux'ta bulamayacağınız eski Bourne kabukları hariç). Ayrıca, bir ödevde (yine exportsayılmaz), sağ tarafın çevresinde çift tırnaklara ihtiyacınız yoktur, bu nedenle boşluklar PATH=$PATH:~/Unix/homebrew/binolsa bile güvenlidir $PATH.

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.