어떤 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.

관련 정보