どの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にするにはどうすればよいですか?nodewhich

答え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~

PATH同様の変数に値を書き込むように設計された特別な種類の割り当てがあります。~割り当てを示す等号の直後にある場合、または割り当ての右側の a の直後に~ある場合は展開されます。:単純な割り当てにのみこの種の割り当てがあり、export PATH=…これは計算されません(文字を含むパラメータを持つ組み込みexport関数への呼び出しです=)。

PATHここではすでにエクスポートしているため、エクスポートする必要はありません。変数の値を変更するときにそれを呼び出す必要はありませんexport(OSXまたはLinuxにない古いBourneシェルを除く)。また、課題(やはりexport計算しない)では右側に二重引用符が必要ないため、スペースを含めてPATH=$PATH:~/Unix/homebrew/bin$PATH安全です。

答え2

~まだ拡張されていないため、この現象が発生します。あなたのシェルはこれを処理する方法を知っていますが、そうでは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

関連情報