ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쉘스크립트의 셔뱅 shebang
    기타/리눅스 2021. 3. 29. 10:10
    쉘 스크립트란 쉘에서 사용할 수 있는 명령어들의 조합을 모아서 만든 배치(batch) 파일이다.
    일반적으로 Python, Perl, Ruby 등 스크립트 언어는 각각의 고유한 인터프리터가 있다. 
    따라서 각 언어용 인터프리터를 따로 설치해야 한다. 쉘 스크립트는 특별한 경우인데, 
    인터프리터가 쉘 자체에 이미 포함되어 있어서 쉘에서 인터프리트 과정을 진행한다.
    쉘 스크립트는 스크립트 언어로 만든 프로그램으로, 우리가 사용하는 운영체제의 쉘과 연동시키는 데에 사용된다.
    
     스크립트는 인터프리터가 처리하고 실행하는데, 쉘 스크립트의 경우는 쉘이 직접 스크립트를 인터프리트한다. 
     
     https://vallhalla-edition.tistory.com/28

     

    아래와 같이 test.sh 를 작성하였다.

    하지만 ./test.sh 로 실행되지 않아 찾아보니, 

    #!/bin/bash 맨 위에 슬래시 하나 빠졌기 때문이였다.

    bash test.sh 로 하니 실행이 되었는데 이게 어떤 의미인지 살펴보았다.

     

     

    askubuntu.com/questions/1158577/bin-bash-bad-interpreter-no-such-file-or-directory

     

    셔뱅(shebang)은 해시 기호와 느낌표(#!)로 이루어진 문자 시퀀스로, 스크립트의 맨 처음에 온다.
    
    유닉스 계열 운영 체제에서 셔뱅이 있는 스크립트는 프로그램으로서 실행되며, 
    
    프로그램 로더가 스크립트의 첫 줄의 나머지 부분을 인터프리터 지시자(interpreter directive)로 
    
    구문 분석한다. 
    
    즉, 지정된 인터프리터 프로그램이 대신 실행되어 스크립트의 실행을 시도할 때 처음 사용되었던 경로를 
    
    인수로서 넘겨주게 된다.
    
    [8] 이를테면 스크립트의 경로가 path/to/script이고 다음의 줄로 시작한다면: 
    
    #!/bin/sh
    
    프로그램 로더는 프로그램 /bin/sh를 대신 실행하되 path/to/script를 첫 번째 인수로 넘겨준다.
    
    셔뱅 줄은 일반적으로 인터프리터에 의해 무시되는데 
    
    그 까닭은 "#" 문자가 수많은 스크립트 언어에서 주석 표시자이기 때문이다. 
    
    스킴처럼 해시 마크를 주석 시작으로 사용하지 않는 일부 언어 인터프리터들은 목적에 맞게 
    
    셔뱅 줄을 무시하기도 한다. 
    
    다른 해결 방안으로는 전처리기에 의존하여 스크립트의 나머지 부분이 컴파일러나 인터프리터에 넘겨지기 전에 
    
    셔뱅 줄을 제거하거나 평가하게끔 하는 방법이다.
    
    https://ko.wikipedia.org/wiki/%EC%85%94%EB%B1%85

    만약 스크립트가 인터프리터로부터 실행된다면, 
    셔뱅이 있을 수도, 없을 수도 있다.
    인터프리터로 실행되는 스크립트는 셔뱅을 필요로 하지 않는다.
    어떤 언어로(인터프리터로) 스크립트를 실행할지에 대한 지시가 없는 것이다.

    1.스크립트를 실행할 때 인터프리터를 호출하는 것은 언제나 셔뱅보다 우선한다.
    2. 실행가능하지 않고, 인터프리터로 실행되는 스크립트는 셔뱅이 필요없다.
    3.만약 스크립트가 인터프리터로 호출되지 않고 실행된다면 
    어떤 인터프리터를 사용할지 지정된 셔뱅이 필요하며, 실행가능해야한다.

     

    * excutable 실행 권한 chmod +x test.sh

    askubuntu.com/questions/850384/is-there-a-command-for-running-a-script-according-to-its-shebang-line/850387#850387

     

    쉘 스크립트 실행 방법

    1. ./test.sh (#!/bin/bash 는 bash 쉘로 sh 를 실행하겠다.)

    2. sh test.sh (sh 는 리눅스, 유닉스에 기본적으로 있는 인터프리터)

    3. bash test.sh (지정 인터프리터로 실행)

     

    나는 git bash 에서 작업해서 sh test.sh 는 되지 않고 1번과 3번만 사용 가능했다.

     

     

     

     

     

    *주의

    변수 선언시 띄어쓰기 없이 

    연산시에 expr 사용 , ` (그레이브 엑센트) 사용, 연산에 띄어쓰기 

    변수에 ${} 로 감싸지 않으면 활용되지 않음

     

    반응형

    '기타 > 리눅스' 카테고리의 다른 글

    리눅스 명령어 | , &, && , ||  (0) 2022.08.11
    tar, tar.gz zip 명령어  (0) 2022.08.11
    redirecting stderr to stdout  (0) 2022.08.08
    blog > BoardController MultipartForm / Post / Save  (0) 2022.08.06
    리눅스 기초 훑기  (0) 2021.04.23
Designed by Tistory.