我已安装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
?
答案1
你的那一行.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
, 也~
不会被扩展,因为它不在 shell 单词的开头。
有一种特殊的分配,旨在为PATH
类似的变量写入值。如果~
就在标记赋值的等号之后,或者如果~
就:
在赋值右侧的 a 之后,则它会被扩展。只有简单的赋值才有这种分配,export PATH=…
不算数(这是对export
内置函数的调用,它恰好有一个包含=
字符的参数)。
在这里,您不需要导出,PATH
因为它已经导出了。当您更改变量的值时不需要调用export
(除了在 OSX 或 Linux 上找不到的旧 Bourne shell 中)。另外,在赋值中(同样,export
不算数),右侧不需要双引号,因此PATH=$PATH:~/Unix/homebrew/bin
即使$PATH
包含空格也是安全的。
答案2
发生这种情况是因为~
尚未扩展。您的 shell 知道如何处理这个问题,但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
。