如何添加 Unix 哪个命令发现的主目录路径?

如何添加 Unix 哪个命令发现的主目录路径?

我已安装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

相关内容