다른 사람의 코드를 읽어 Bash 스크립트를 학습하는 경우 스크립트의 첫 줄이 #! 문자 및 Bash 인터프리터의 경로로 시작된다는 것을 알게 되었을 수 있습니다.
이 일련의 문자(#!)를 셰방이라고 하며, 파일의 나머지 부분을 구문 분석하는 데 사용할 인터프리터를 운영 체제에 알려주는 데 사용됩니다.
Shebang 인터프리터 지침
Shebang 인터프리터 지시문은 다음과 같은 형식을 취합니다.
#!interpreter [arguments]
지시어는 스크립트의 첫 번째 줄이어야 합니다.
지시는 쉬빵부터 시작해야 해요!
쉐방 문자 뒤의 공백은 선택 사항입니다.
인터프리터는 이진 파일의 전체 경로입니다(ex: /bin/sh, /bin/bash).
인터프리터 인수는 선택 사항입니다.
예제:
#!/bin/bash - bash를 사용하여 파일을 구문 분석합니다.
#!/usr/bin/envperl - env 명령을 사용하여 Perl 실행 파일의 경로를 찾습니다.
#! /usr/bin/python 파이썬 바이너리를 사용하여 파일을 실행합니다.
Bash 스크립트에서 Shebang을 사용
shebang을 지정하지 않고 Bash 스크립트를 실행하는 사용자가 다른 Shell을 사용하는 경우 해당 Shell에서 사용되는 기본 인터프리터를 사용하여 스크립트를 구문 분석합니다. 예를 들어 bash의 기본 인터프리터는 bash 및 zshish입니다. 스크립트가 항상 Bash와 함께 해석되도록 하려면 shebang을 사용하여 실행 경로를 지정해야 합니다.
Shebang 지시어를 사용하는 방법과 통역기를 설정하는 방법은 두 가지가 있습니다.
bash 이진법에 대한 절대 경로 사용:
#!/bin/bash
Env 유틸리티를 사용합니다.
#!/usr/bin/env bash
두 번째 접근 방식을 사용하면 사용자의 $PATH 환경 변수에서 bash 실행 파일을 검색할 수 있습니다. bash에 둘 이상의 경로가 있는 경우 첫 번째 경로가 스크립트에서 사용됩니다.
첫 번째 옵션을 사용하여 Bash 셸 공급에 옵션을 추가하는 경우 이 옵션을 인터프리터에 전달합니다. 예를 들어, 디버그 모드에서 스크립트를 실행하려면 #!/bin/bash -x를 사용합니다. env 메서드를 사용하는 경우 set를 사용하여 옵션을 선언해야 합니다. 디버그 모드를 활성화하려면 shebang 라인 뒤에 set -x를 추가합니다.
예제 스크립트
"Hello, World"를 인쇄할 쉬방을 사용하여 간단한 스크립트를 작성해 보겠습니다. 텍스트 편집기를 열고 다음 줄을 붙여넣습니다.
# hello_world
#!/bin/bash
echo "Hello, World"
명령줄에서 인터프리터를 지정하지 않고 스크립트를 실행하려면 파일을 실행 파일로 만들어야 합니다.
chmod +x hello_world
이제 ./를 입력하고 스크립트 이름을 입력하여 스크립트를 실행할 수 있습니다.
# ./hello_world
Hello, World
Shebang을 재지정
어떤 이유로든 Shebang 라인에 있는 인터프리터 세트를 재정의하려면 원하는 셸을 명시적으로 지정하여 스크립트를 실행해야 합니다.
예를 들어 bash 셸을 사용하여 Shebang 라인에 #!/bin/sh가 지정된 스크립트를 실행하려면 다음을 입력합니다.
bash hello_world
셸 인터프리터는 스크립트가 예기치 않은 동작을 일으킬 수 있으므로 재정의하는 것은 좋지 않습니다.
이제 셰방이 무엇인지, 배쉬 스크립트에서 어떻게 사용하는지 잘 이해해야 합니다.
'SW > 리눅스' 카테고리의 다른 글
Linux : Debian 10 : MySQL 설치 방법, 예제, 명령어 (0) | 2021.11.10 |
---|---|
Linux :Locate 명령어, 사용 방법, 예제 (0) | 2021.11.09 |
Git : 로컬, 원격 브랜치 생성, 나열 방법, 예제, 명령어 (0) | 2021.11.06 |
Python : String 문자열 분리 방법, 예제, 명령어 (0) | 2021.11.05 |
Linux : Ubuntu 18.04 : VirtualBox Guest Additions 설치 방법, 예제, 명령어 (0) | 2021.11.04 |