인터프리터가 실행하는 스크립트는 일반적으로 OS에 실행 방법을 알려주는 shebang 줄 이 맨 위에 있습니다.
foo
첫 번째 줄이 인 스크립트가있는 경우 #!/bin/sh
시스템은 해당 첫 번째 줄을 읽고 /bin/sh foo
. 이 때문에 대부분의 인터프리터는 스크립트 파일의 이름을 명령 줄 인수로 받아들이도록 설정됩니다.
다음에 오는 인터프리터 이름 #!
은 전체 경로 여야합니다. OS는 $PATH
통역사를 찾기 위해 검색하지 않습니다 .
에서 실행할 스크립트가있는 node
경우 첫 번째 줄을 작성하는 확실한 방법은 다음과 같습니다.
#!/usr/bin/node
하지만 node
명령이 .NET에 설치되어 있지 않으면 작동하지 않습니다 /usr/bin
.
일반적인 해결 방법은 다음 env
명령 을 사용하는 것입니다 ( 실제로이 목적을위한 것이 아님).
#!/usr/bin/env node
스크립트가 호출 foo
되면 OS는 다음과 같은 작업을 수행합니다.
/usr/bin/env node foo
이 env
명령은 명령 줄에 이름이 지정된 다른 명령을 실행하여 다음 인수를 해당 명령에 전달합니다. 여기서 사용되는 이유 는 명령 env
을 검색 $PATH
하기 때문입니다. 그래서 경우가 node
에 설치 /usr/local/bin/node
하고, 당신이 /usr/local/bin
당신에 $PATH
의 env
명령을 호출합니다 /usr/local/bin/node foo
.
env
명령 의 주요 목적은 수정 된 환경으로 다른 명령을 실행하여 명령을 실행하기 전에 지정된 환경 변수를 추가하거나 제거하는 것입니다. 그러나 추가 인수없이 변경되지 않은 환경에서 명령을 실행하기 만하면이 경우에 필요한 전부입니다.
이 접근 방식에는 몇 가지 단점이 있습니다. 대부분의 최신 Unix 계열 시스템에는 /usr/bin/env
.이 있지만 env
명령이 다른 디렉토리에 설치된 이전 시스템에서 작업했습니다 . 이 메커니즘을 사용하여 전달할 수있는 추가 인수에 제한이있을 수 있습니다. 사용자가 경우 하지 않습니다 포함하는 디렉토리가 node
에 명령을 $PATH
하거나이라는 일부 다른 명령을 가지고 node
, 그것은 전혀 잘못된 명령이나하지 작업을 호출 할 수있다.
다른 접근 방식은 다음과 같습니다.
- 명령 자체에
#!
대한 전체 경로를 지정 하는 행을 사용하여 node
다른 시스템에 필요한대로 스크립트를 업데이트하십시오. 또는
node
스크립트를 인수로 사용하여 명령을 호출하십시오 .
트릭에 대한 자세한 내용은 이 질문 (및 내 대답 )을 참조하십시오 #!/usr/bin/env
.
덧붙여서, 내 시스템 (Linux Mint 17.2)에는 /usr/bin/nodejs
. 내 노트에 따르면, 변경 /usr/bin/node
에 /usr/bin/nodejs
우분투 12.04과 12.10 사이. #!/usr/bin/env
트릭이하지 도움이 될 것입니다 (당신은 심볼릭 링크 또는 뭔가 비슷한을 설정하지 않은 경우).
업데이트 : mtraceur의 의견은 다음과 같이 말합니다.
nodejs 대 노드 문제에 대한 해결 방법은 다음 6 줄로 파일을 시작하는 것입니다.
#!/bin/sh -
':' /*-
test1=$(nodejs --version 2>&1) && exec nodejs "$0" "$@"
test2=$(node --version 2>&1) && exec node "$0" "$@"
exec printf '%s\n' "$test1" "$test2" 1>&2
*/
이것은 먼저 시도한 nodejs
다음 시도 node
하고 둘 다 찾을 수없는 경우에만 오류 메시지를 인쇄합니다. 설명은이 의견의 범위를 벗어납니다.이 답변이 문제를 제기했기 때문에 누군가가 문제를 처리하는 데 도움이 될 수 있도록 여기에 남겨 두겠습니다.
최근 NodeJS를 사용하지 않았습니다. 내 희망은 이 답변을 처음 게시 한 이후 몇 년 동안 nodejs
대 node
문제가 해결 되기를 바랍니다 . Ubuntu 18.04에서 nodejs
패키지는 /usr/bin/nodejs
에 대한 심볼릭 링크로 설치 됩니다 /usr/bin/node
. 일부 이전 OS (Ubuntu 또는 Linux Mint, 어느 것이 확실하지 않음)에는에 대한 심볼릭 링크로 nodejs-legacy
제공 되는 패키지 가있었습니다 . 내가 모든 세부 사항을 올바르게 가지고 있다는 보장은 없습니다.node
nodejs
node