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

Eon*_*nil 12 path profile home which

我已安装node.js在自定义位置并将该位置添加到$PATHin.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"
Run Code Online (Sandbox Code Playgroud)

Node.js 本身运行良好。问题是它没有按which命令列出。所以我npm现在无法安装。因为npm安装找不到node.js. 我怎样才能使node发现的二进制文件which

Gil*_*il' 19

你的那一行.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
Run Code Online (Sandbox Code Playgroud)

~字符仅在它是单词的第一个字符且未加引号时才会扩展到您的主目录。在您所写的内容中, the~位于双引号之间,因此未扩展。即使你写了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包含空格也是安全的。


Chr*_*own 11

这是因为~尚未扩展。您的 shell 知道如何处理这个问题,但which不知道(大多数其他程序也不知道)。相反,请执行以下操作:

export "PATH+=:$HOME/Unix/homebrew/bin"
Run Code Online (Sandbox Code Playgroud)

或者,停止使用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
Run Code Online (Sandbox Code Playgroud)

请记住,其他一些查看的程序$PATH可能无法理解其中~任何一个的含义,并将其作为相对路径的一部分。使用起来更便携$HOME