파일 경로를 입력하여 파일을 실행하는 것과 동일합니까(shebang 라인 사용)?

파일 경로를 입력하여 파일을 실행하는 것과 동일합니까(shebang 라인 사용)?

나한테 파일이 있다고 해봐안녕하세요:

#!/bin/sh

echo "Hello World!"

파일에 실행 가능 비트가 설정되어 있으면 프롬프트에 해당 경로를 입력하여 실행할 수 있습니다.

$ ./hello
Hello World!

위와 동일한 내용이 더 명시적으로 나와 있나요? 비슷하다:

$ execute hello

난 합격할 수 있다는 걸 알아안녕하세요인수로 사용 /bin/sh하지만 shebang 줄에 지정된 인터프리터를 자동으로 사용하는 솔루션을 찾고 있습니다.

내 사용 사례는 실행 가능 플래그를 설정하지 않고 스크립트 파일을 실행하는 것입니다. 이러한 파일은 git 저장소에 저장되므로 실행 가능 플래그를 설정하거나 먼저 다른 위치에 복사할 필요가 없습니다.

답변1

당신은 그것을 사용할 수 있습니다 perl:

perl hello

~에서perl문서:

#!줄에 "perl"이나 "indir"이라는 단어가 포함되어 있지 않으면 프로그램 이름은 #! Perl 인터프리터 대신 실행됩니다. 이것은 약간 이상하지만 #!을 수행하지 않는 컴퓨터의 사람들에게 도움이 됩니다. 왜냐하면 SHELL이 /usr/bin/perl이고 Perl이 프로그램을 올바른 인터프리터로 보낼 것이기 때문입니다.

(통과하다)

답변2

다음 Perl5 스크립트에는 오류 검사가 없으며 hashbang 줄을 잡고 이를 호출하여 인수로 전달된 스크립트를 실행합니다. (ilkkachu의 설명을 기반으로 단순화 및 압축) 전체 파일을 읽지 않도록...

open FH, ("<",$ARGV[0])
$line = <FH>;
close FH;
if ($line =~ /^\#\!(.*)/) {
    $engine = $1;
    exec("$engine $ARGV[0]");
}

관련 정보