Eu tenho instalado node.js
no local personalizado e acrescentou o local para o $PATH
no .profile
arquivo.
$ 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"
O próprio Node.js roda bem. O problema é que não está listado por which
comando. Portanto, não posso instalar npm
agora. Porque a npm
instalação não consegue encontrar a localização de node.js
. Como posso fazer com que o node
binário seja descoberto which
?
which
não tem culpa aqui; o~
deveria ter sido expandido na definição dePATH
. Há uma estranheza no bash em que ele se expande de~
qualquer maneiraPATH
, então dois erros fazem o certo, mais ou menos.~
é uma estranheza do bash. Ter esse literal~
em$PATH
é susceptível de causar problemas para baixo da linha porque existem programas que fazem a sua própria divisão de$PATH
e eles não tratam~
especificamente.~
", sua frase é enganosa. No contexto de$PATH
, este é todo programa que não seja o bash.Essa linha no seu
.profile
deve ser um dosO
~
caractere só é expandido para o diretório inicial quando é o primeiro caractere de uma palavra e não está entre aspas. No que você escreveu,~
é entre aspas duplas e, portanto, não é expandido. Mesmo se você escrevesseexport "PATH=$PATH:"~/Unix/homebrew/bin
, o~
não seria expandido porque não está no início de uma palavra shell.Existe uma dispensação especial, cujo objetivo é escrever valores para
PATH
e variáveis semelhantes. Se~
for logo após o sinal de igual que marca uma tarefa, ou se~
for logo após a:
no lado direito de uma tarefa, será expandido. Apenas atribuições simples têm essa dispensação,export PATH=…
não contam (é uma chamada para oexport
builtin, que por acaso tem um argumento que contém um=
caractere).Aqui, você não precisa exportar
PATH
porque já foi exportado. Você não precisa ligarexport
quando altera o valor de uma variável (exceto nos antigos shell Bourne que você não encontrará no OSX ou Linux). Além disso, em uma tarefa (novamente,export
não conta), você não precisa de aspas duplas no lado direito, portantoPATH=$PATH:~/Unix/homebrew/bin
é seguro mesmo que$PATH
contenha espaços.fonte