유닉스에 의해 발견되는 홈 디렉토리 경로를 추가하는 방법 어떤 명령?


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.js. node바이너리를 어떻게 발견 하게 할 수 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있으므로 두 가지 잘못이 옳고 그름을합니다.
Gilles 'SO- 악마 중지

@Gilles 그것은 내가 말한 것과 어떻게 다릅니 까?
Chris Down

이것이 인용 된 것과 전혀 작동한다는 사실 ~은 bash 이상한 것입니다. 그 리터럴 ~을 넣는 것은 $PATH스스로 나누는 프로그램이 $PATH있고 ~특별하게 취급하지 않는 프로그램이 있기 때문에 문제를 일으킬 수 있습니다 .
Gilles 'SO- 악의를 멈춰라

@Gilles ... 그리고 이것이 마지막 단락에서 말한 것과 어떻게 다릅니 까?
Chris Down

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유사한 변수에 대한 값을 작성하기위한 것 입니다. 경우 ~단지 경우 할당하거나 표시하는 등호 이후 ~단지 이후 :할당의 오른쪽에, 다음 확장입니다. 일반 할당만이 분배를하고 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.