Як додати шлях до домашнього каталогу для виявлення Unix, яка команда?


12

Я встановив node.jsна іншому місці і додав розташування в $PATHв .profileфайл.

$ 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 сам працює добре. Проблема в тому, що вона не вказана whichкомандою. Тому я npmзараз не можу встановити . Оскільки npmустановка не може знайти місцезнаходження node.js. Як я можу зробити так, щоб nodeдвійкове відкрите which?

Відповіді:


11

Це відбувається тому, ~що не було розширено. Ваша оболонка знає, як з цим боротися, але whichне (як і більшість інших програм). Натомість зробіть:

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

Крім того, припиніть використання whichта користуйтеся (майже завжди вище) type -p.

Ось демонстрація проблеми:

$ 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

Майте на увазі, що деякі інші програми, які переглядають, $PATHможуть не розуміти значення ~жодної з них, і вважають це частиною відносного шляху. Це більш портативний у використанні $HOME.


1
Хоча запропоноване рішення працює, пояснення невірно. whichтут не винна; ~повинні були розширені у визначенні PATH. У диваку є дивацтво, що воно ~все одно розширюється PATH, тому дві кривди роблять правильні, подібні.
Жил 'SO- перестань бути злим'

@Gilles Чим це відрізняється від того, що я сказав?
Кріс Даун

Те, що це взагалі працює з цитованими, ~- це дивна дивацтво. Маючи , що буквальні ~ін $PATHможе викликати проблеми вниз лінію , тому що є програми , які роблять свої власні розщепленню , $PATHі вони не відносяться до ~спеціально.
Жил 'SO- перестань бути злим'

@Gilles ... і чим це відрізняється від того, що я сказав у своєму останньому абзаці?
Кріс Даун

1
Хоча технічно вірно, що "якась інша програма… може не зрозуміти значення ~", ваше речення вводить в оману. У контексті $PATH, це кожна програма, крім bash.
Жил "ТАК - перестань бути злим"

18

Цей рядок у вашому .profileмає бути одним із

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

~Характер тільки розширюються в свій домашньому каталог , коли це перший символ слова , і це некотируваних. У тому, що ви написали, значення ~знаходиться між подвійними цитатами і тому не розширюється. Навіть якби ви писали export "PATH=$PATH:"~/Unix/homebrew/bin, цей текст ~не розширюватиметься, оскільки це не на початку слова-оболонки.

Існує спеціальна диспенсія, яка призначена для запису значень для PATHі подібних змінних. Якщо ~тільки після знака рівності , що позначки призначення, або якщо ~це тільки після того, як :у правій частині присвоювання, то це розширений. Лише звичайні призначення мають це розповсюдження, export PATH=…не рахується (це дзвінок до exportвбудованого, який, як буває, має аргумент, що містить =символ).

Тут вам не потрібно експортувати, PATHоскільки він вже експортується. Вам не потрібно дзвонити, exportколи ви зміните значення змінної (за винятком старих оболонок Борна, яких ви не знайдете на OSX або Linux). Крім того, у призначенні (знову ж таки, exportне рахується) вам не потрібні подвійні лапки навколо правої частини, тому PATH=$PATH:~/Unix/homebrew/binце безпечно, навіть якщо $PATHмістить пробіли.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.