Shebang에서 #!과 /bin/bash 사이에 공백이 허용됩니까?

Shebang에서 #!과 /bin/bash 사이에 공백이 허용됩니까?

셔뱅 과 통역사 #!사이에 공백 이상이 허용됩니까 ?

예를 들어, #! /bin/bash. 이것은 효과가 있는 것 같지만 어떤 사람들은 그것이 틀렸다고 말합니다.

답변1

예, 허용됩니다.

위키피디아 기사셰본 소개 Dennis Ritchie가 shebang에 대한 커널 지원을 소개할 때 보낸 1980년 이메일이 포함되어 있습니다.통역사 지시문)를 버전 8 Unix로(강조):

#!실행 중인 파일이 마법 문자로 시작하면 나머지 줄은 실행 중인 파일에 대한 인터프리터 이름으로 인식되도록 시스템이 변경되었습니다 . […]

이 좋은 기회를 활용하시려면,

#! /bin/sh

쉘 스크립트 첫 번째 줄의 왼쪽 여백에 위치합니다. 비워두어도 !괜찮습니다 .

따라서 shebang 이후의 공백은 오랫동안 존재해 왔으며 실제로 Dennis Ritchie의 사례에서는 이를 사용하고 있습니다.

이전 버전의 Unix에서는 이 인터프리터 줄에 16자로 제한되었으므로 공백이 포함될 수 없습니다. 이 제한은 더 이상 최신 커널에 적용되지 않습니다.

답변2

예, 뒤에 공백이 허용됩니다 #!. 일부 시스템에서는 이를 요구할 수도 있다고 (잘못) 믿었지만 항상 선택 사항일 뿐입니다.

더 읽어보려면여기

답변3

참고로 systemd의 일부 버전은 공백이 있는 shebang을 구문 분석할 수 없습니다. 다음과 같은 서비스를 사용하면:

[Service]
Type=oneshot
ExecStart=/root/foo.sh

...그리고 다음과 같은 셰뱅도 있습니다:

#! /bin/bash

...다음과 같은 오류가 발생할 수 있습니다.

systemd[32834]: foo.service: Failed at step EXEC spawning /root/foo.sh: Exec format error

shebang에서 공백을 제거하면 오류가 해결됩니다. 그러니 주의 깊게 살펴보세요.

관련 정보