동일한 매개변수를 사용하여 shebang이라는 스크립트를 실행하면 실제 실행되는 명령은 무엇입니까?

동일한 매개변수를 사용하여 shebang이라는 스크립트를 실행하면 실제 실행되는 명령은 무엇입니까?

shebang에 관한 bash 매뉴얼에서

대부분의 Unix 버전에는 이를 운영 체제의 명령 실행 메커니즘의 일부로 포함합니다. 스크립트의 첫 번째 줄이 두 문자 "#!"으로 시작하면 줄의 나머지 부분은 프로그램의 인터프리터를 지정합니다. 따라서 Bash, awk, Perl 또는 기타 인터프리터를 지정하고 나머지 스크립트 파일을 해당 언어로 작성할 수 있습니다.

통역사에게 제시된 주장포함하다단일 선택적 매개변수스크립트 파일의 첫 번째 줄에 인터프리터 이름 다음에스크립트 파일의 이름, 이어서 나머지 주장. Bash는 이를 기본적으로 처리하지 않는 운영 체제에서 이 작업을 수행합니다. 일부 이전 버전의 Unix에서는 인터프리터 이름과 인수를 최대 32자로 제한합니다.

"선택적 매개변수"란 옵션의 매개변수 또는 존재할 수도 있고 존재하지 않을 수도 있는 매개변수를 의미합니까?

왜 "단일 선택적 매개변수"인가요? 여러 개의 "선택적 매개변수"를 허용하지 않습니까?

스크립트가 다음과 같다면

#! /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2

...

Bash에서 스크립트를 실행할 때

$ myscript arg1 arg2 arg3

Bash에서 실행되는 실제 명령은 무엇입니까? 응

$ /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2 myscript arg1 arg2 arg3

감사해요.

답변1

이 경우 인터프리터의 인수는 shebang 라인을 해석한 후 이를 스크립트 이름 및 해당 명령줄 인수와 결합하여 구성한 인수입니다.

따라서 AWK 스크립트는 다음으로 끝납니다.

#! /usr/bin/awk -f

이름을 붙이고 myscript불렀다

./myscript file1 file2

결과는 실제 매개변수입니다.

/usr/bin/awk -f ./myscript file1 file2

-f이 경우 단일 선택적 매개변수입니다. 모든 통역사가 하나를 요구하는 것은 아니며( /bin/sh예제 참조) 많은 시스템은 최대 하나만 허용합니다(그래서 shebang 라인은 예상대로 작동하지 않습니다). 그러나 인수에는 공백이 포함될 수 있습니다. 인터프리터 뒤의 shebang 줄의 전체 내용은 단일 인수로 전달됩니다.

shebang 라인을 실험하려면 다음을 사용할 수 있습니다 #! /bin/echo(단, 공백이 포함된 경우 매개변수를 구별하는 데 도움이 되지는 않습니다).

바라보다프로그램 작동 방식Shebang 줄을 처리하는 방법에 대한 자세한 지침(Linux에서)

답변2

맨페이지를 읽어보세요 execve(2). 개별 선택적 매개변수에 대한 제한은 운영 체제에 따라 다릅니다. Linux는 인터프리터 뒤의 모든 단어를 매개변수로 처리합니다.

이를 수행하려면 다음을 수행하십시오.

#! /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2

사실 넌 이렇게 해야 해

#!/bin/sh
exec /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2 "$@"
# ...................................................................................... ^^^^

env업데이트: 프로그램에 이 목적을 위한 옵션이 있다는 것을 알았습니다 -S. shebang이 될 수 있습니다(이 프로그램을 유지해야 한다면 불행하겠지만)

#!/usr/bin/env -S /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2

맨페이지를 읽어보세요 env(1).

관련 정보