Mam zainstalowany node.js
w niestandardowej lokalizacji i dodać lokalizację do $PATH
w .profile
pliku.
$ 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"
Sam Node.js działa dobrze. Problem polega na tym, że nie ma go na liście which
poleceń. Więc nie mogę npm
teraz zainstalować . Ponieważ npm
instalacja nie może znaleźć lokalizacji node.js
. Jak mogę node
odkryć plik binarny which
?
which
nie jest tutaj winny;~
powinna zostać rozszerzona w definicjiPATH
. Jest takie kuriozum w bash, że rozszerza~
W każdym razie wPATH
, więc dwie krzywdy zrobić prawo, rodzaj.~
jest dziwną dziwką. Mając to dosłowne~
in$PATH
może powodować kłopoty w dół linii, ponieważ istnieją programy, które robią swoje rozszczepienie$PATH
i nie traktują~
specjalnie.~
”, zdanie jest mylące. W kontekście$PATH
jest to każdy program inny niż bash.Ta linia w twoim
.profile
powinna być jedną z~
Znak rozszerzony tylko do swojego katalogu domowego, gdy jest to pierwszy znak słowa i to nie notowanych. W tym, co napisałeś,~
jest pomiędzy podwójnymi cudzysłowami, a zatem nie jest rozwinięte. Nawet jeśli napisałeśexport "PATH=$PATH:"~/Unix/homebrew/bin
,~
nie zostanie rozwinięty, ponieważ nie ma go na początku słowa powłoki.Istnieje specjalne dozowanie, które ma na celu zapisywanie wartości
PATH
i podobnych zmiennych. Jeśli~
jest tuż za znakiem równości, który oznacza przydział, lub jeśli~
jest tuż po znaku po:
prawej stronie przydziału, to jest on rozwinięty. Tylko zwykłe przypisania mają tę dyspensację,export PATH=…
nie liczą się (jest to wywołanieexport
wbudowanego, które akurat ma argument zawierający=
znak).W tym przypadku nie trzeba eksportować,
PATH
ponieważ jest już wyeksportowany. Nie musisz dzwonić,export
gdy zmieniasz wartość zmiennej (z wyjątkiem starych powłok Bourne'a, których nie znajdziesz w OSX lub Linux). Ponadto w zadaniu (znowuexport
się nie liczy) nie potrzebujesz podwójnych cudzysłowów po prawej stronie, więcPATH=$PATH:~/Unix/homebrew/bin
jest bezpieczny, nawet jeśli$PATH
zawiera spacje.źródło