Path

如何添加要被 Unix 哪個命令發現的主目錄路徑?

  • September 23, 2017

我已經安裝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"

Node.js 本身執行良好。問題是它沒有按which命令列出。所以我現在不能安裝npm。因為npm安裝找不到node.js. 如何製作由node發現的二進製文件which

發生這種情況是因為~尚未擴展。您的 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

你的那一行.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

~僅當該字元是單詞的第一個字元且未加引號時,該字元才會擴展到您的主目錄。在您所寫的內容中, the~位於雙引號之間,因此未展開。即使你寫了export "PATH=$PATH:"~/Unix/homebrew/bin, the~也不會被擴展,因為它不是一個 shell 詞的開頭。

有一個特殊的分配,旨在為PATH類似變數寫入值。如果~就在標記賦值的等號之後,或者如果~就在:賦值右側的 a 之後,那麼它會被擴展。只有普通的分配有這種分配,export PATH=…不算數(這是對export內置函式的呼叫,它恰好有一個包含=字元的參數)。

在這裡,您不需要導出PATH,因為它已經導出。更改變數的值時不需要呼叫export(在舊的 Bourne shell 中除外,在 OSX 或 Linux 上找不到)。此外,在賦值(同樣,export不算數)中,右側不需要雙引號,因此PATH=$PATH:~/Unix/homebrew/bin即使$PATH包含空格也是安全的。

引用自:https://unix.stackexchange.com/questions/25605