저는 최근에 좀 더 구조화된 방식으로 Linux POSIX 쉘 스크립트를 개발하기 시작했습니다.
설명하겠습니다.
코드[A]는 일부 코드 [B]에 의해 얻어집니다. 최소한의 예는 다음과 같습니다.
#!/bin/sh
# REQUIREMENTS
# none
# METHODS (public)
# none; this file when sourced sets up basic tput colors, if available
...
코드[B]실행 시 몇 가지 최소한의 예는 다음과 같습니다.
#!/bin/sh
# REQUIREMENTS
. /home/username/Development/sh/functions/func-color_support
# METHODS (public)
print_error ()
# this prints custom heading and a given error message
{
...
}
#!/bin/sh
처음에는 이를 깨닫지 못했습니다. 최신 버전의 Bash 및 Dash에서 제대로 작동하기 때문에 함수 파일을 얻을 때마다 shebang()을 복사합니다. 자체 컴파일된 ShellCheck 및 VS Code를 사용하여 작업하고 있습니다.확실히Shebang을 추가한 이유는 당연히 매번 구문 강조 표시를 변경하지 않고도 기능을 편집하고 업데이트하고 싶었기 때문입니다.
그래서 내 질문은 다음과 같습니다.
Shebang( #!/bin/sh
)을 반복하는 것이 POSIX 쉘 프로그래밍을 위반합니까?규칙또는지침? 또한 파일을 조각으로 소싱할 때 POSIX shebang()의 중복으로 #!/bin/sh
인해 실제적 또는 이론적 문제가 발생 합니까?
어제 StackOverflow에 이 글을 게시했지만 여전히 답변이 없습니다. 하지만 이 의견은 유망해 보입니다.
- 2.1.1 참조여기, 인용하다:
셸 명령 파일의 첫 번째 줄이 "#!" 문자로 시작하면 결과가 지정되지 않습니다.
답변1
Shebang(#!/bin/sh)을 반복하는 것이 POSIX 쉘 프로그래밍 규칙이나 지침을 위반합니까?
나는 그것을 믿지 않는다. dot
같은 페이지에서 정의를 확인하세요 .
쉘은 현재 환경에서 파일의 명령을 실행해야 합니다.
source() 파일의 첫 번째 줄은 dot
다음과 같습니다.쉘 명령 파일의 첫 번째 줄왜냐하면 우리는 그것들을 현재 환경에 추가하는 것뿐이기 때문입니다. 그래서 걱정하시는 것 같아요"셸 명령 파일의 첫 번째 줄이 "#!" 문자로 시작하면 결과가 지정되지 않습니다." 해당되지 않습니다.
또한 POSIX shebang(#!/bin/sh)의 중복으로 인해 파일을 조각으로 소싱할 때 실용적이든 이론적이든 문제가 발생할 수 있습니까?
나는 그런 문제를 직접 본 적이 없습니다. 이 경우에는 #
단지 주석 표시일 뿐입니다.
답변2
문제가 아니다. shebang 라인 ( ) 은 맞는 코멘트 #!/bin/bash
처럼 보입니다 .#
bash
#!
스크립트를 시작할 때만 해석됩니다.