Unix whichコマンドで検出されるホームディレクトリパスを追加する方法


12

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.jsnodeによって発見されたバイナリをどのように作成できwhichますか?

回答:


11

~展開されていないため、これは起こっています。シェルはこれに対処する方法を知っていますが、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です。


1
提案されたソリューションは機能しますが、説明は間違っています。whichここでは誤りではありません。これ~はの定義で拡張されているはずですPATH~とにかくbashを拡張するという奇妙な点があるPATHので、2つの誤りが正しいのです。
Gilles「SO-悪をやめる」

@ギレスそれは私が言ったこととどう違うのですか?
クリスダウン

これが引用されたものでまったく機能するという事実~は、bashの奇妙なことです。そのリテラルを使用~する$PATHと、独自の分割を行うプログラムがあり、特別に$PATH処理しないため、問題が発生する可能性があり~ます。
Gilles「SO-邪悪なことをやめなさい」

@ギレス...そしてそれは私が最後の段落で言ったこととどう違うのですか?
クリスダウン

1
「他のプログラム…の意味を理解していない可能性がある」というのは技術的には真実ですが~、あなたの文章は誤解を招くものです。のコンテキストでは$PATH、これはbash以外のすべてのプログラムです。
Gilles 'SO-悪をやめ

18

あなたのその行.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と同様の変数の値を書き込むための特別なディスペンスがあります。if ~が割り当てを示す等号の直後、または割り当ての右側の~aの直後の場合は:、展開されます。単純な割り当てだけにこのような制限があり、export PATH=…カウントされません(これはexport組み込み=文字の呼び出しであり、たまたま文字を含む引数があります)。

ここでは、PATHすでにエクスポートされているため、エクスポートする必要はありません。export変数の値を変更するときに呼び出す必要はありません(OSXまたはLinuxにはない古いBourneシェルを除く)。また、割り当てでは(ここでもexportカウントされません)、右側を二重引用符で囲む必要がないため、スペースが含まれPATH=$PATH:~/Unix/homebrew/binている場合でも安全$PATHです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.