shebang 라인에 #!command를 사용하면 어떨까요?

shebang 라인에 #!command를 사용하면 어떨까요?
#!python3
print("Hello")

이 코드가 내 터미널에서 제대로 작동하는 것을 발견했습니다. 하지만 모두가 그렇게 #!/path/to/file하거나 #!/usr/bin/env command.

#!command셔뱅라인에서 사용을 피해야 할 이유가 있나요 ?

답변1

일반적으로 경로 없는 shebang은 shebang의 명령이 현재 디렉터리에 있다고 가정합니다. 보다 일반적으로, 절대적이지 않은 shebang은 스크립트를 실행하는 프로세스의 현재 디렉터리를 기준으로 해석됩니다.

명령이 현재 디렉토리에 없는 경로 없는 shebang은 스크립트가 일부 쉘(적어도 Zsh, Bash는 아님)에서 시작될 때만 작동하며 쉘에서 제공하는 도움말 때문에 작동합니다. 스크립트가 실행되면 실행이 실패하지만 규칙은 다음과 같습니다.쉘이 스크립트라고 생각하면 스크립트 실행을 시도합니다.; Zsh는 해당 경로에서 shebang 명령을 찾지만 이는 표준이 아닙니다.

경로가 없는 shebang 명령이 포함된 스크립트는 다른 컨텍스트에서는 실행되지 않습니다.

PATH기반 shebang을 작성하는 관용적 방법은 /usr/bin/env언급한 대로 를 사용하는 것입니다.

#! /usr/bin/env python3

또는 일부 버전의 env경우

#! /usr/bin/env -S python3 --

대시로 시작하는 스크립트 경로 관련 문제를 방지합니다.

관련 정보