쉘 스크립트의 첫 번째 줄에는 무엇이 쓰여 있습니까? 그게 무슨 뜻이야? 내가 그 줄을 쓰지 않으면 어떻게 될까요? 그렇다면 스크립트를 어떻게 실행합니까? [복사]

쉘 스크립트의 첫 번째 줄에는 무엇이 쓰여 있습니까? 그게 무슨 뜻이야? 내가 그 줄을 쓰지 않으면 어떻게 될까요? 그렇다면 스크립트를 어떻게 실행합니까? [복사]

쉘 스크립트의 첫 번째 줄은 무엇을 의미합니까? 해당 줄을 작성하지 않으면 어떻게 됩니까? 그러면 스크립트를 어떻게 실행합니까?

답변1

첫 번째 줄(shebang이라고 함)은 파일을 실행하는 데 어떤 인터프리터를 사용해야 하는지 알려줍니다. "관련성"으로 표시된 Steeldriver의 답변은 무엇을 기대하는지 더 자세히 알려줄 것입니다.

그래서 시작하면

 #!/bin/bash

bash이 파일을 해석하는 데 사용됩니다. 다른 일반적인 실행 프로그램은 #!/usr/bin/perl또는 입니다 #!/usr/bin/python. 그러나 tst파일을 생성하는 경우에는 이에 국한되지 않습니다.

#!/usr/bin/vi
jantje zag eens pruimen hangen
oh als eieren zo groot

, 파일을 실행 가능하게 만들고( chmod +x tst) 실행하면( ./tst) 파일을 편집하기 위해 vi가 시작됩니다.

질문의 다음 부분은 첫 번째 줄에 shebang이 없으면 어떻게 되는지입니다. 대답은 현재 사용되는 통역사가 사용된다는 것입니다. 데모: 파일 만들기 tst:

ps -f

(shebang은 없고 한 줄만) 실행 파일을 만들고( chmod +x tst) 실행합니다( ./tst). 결과는 다음과 유사합니다.

ljm@phi:~$ ./tst
UID        PID  PPID  C STIME TTY          TIME CMD
ljm       1379  1377  0 Oct06 pts/3    00:00:00 -bash
ljm      20769  1379  0 10:34 pts/3    00:00:00 -bash
ljm      20770 20769  0 10:34 pts/3    00:00:00 ps -f

(1379는 현재 쉘이고 20769는 해석을 위한 bash tst이므로 ps의 상위(PPID)입니다.)

a를 시작 sh하고 다시 실행 하면 tst다음이 표시됩니다.

ljm@phi:~$ sh
$ ./tst   
UID        PID  PPID  C STIME TTY          TIME CMD
ljm       1379  1377  0 Oct06 pts/3    00:00:00 -bash
ljm      20773  1379  0 10:34 pts/3    00:00:00 sh
ljm      20774 20773  0 10:34 pts/3    00:00:00 /bin/sh ./tst
ljm      20775 20774  0 10:34 pts/3    00:00:00 ps -f
$ 

이제 sh설명하겠습니다 tst.

답변2

그렇다면 Shebang 없이 스크립트를 어떻게 실행합니까?

파일(예: tst)로 가져오면 실행도 불가능합니다.

source tst
. tst

(이것들은 buitins입니다 -> help source)

또는

bash tst

이는 다음과 유사합니다.

bash -c 'string of commands aka script'

이러한 언어 해석기와 "명령 스트림"의 매칭은 Perl, sed 및 awk에서도 다양한 방식으로 사용됩니다.

관련 정보