[리눅스] bash의 모든 것, #!/bin/bash의 의미
업데이트:
[리눅스] bash의 모든 것, #!/bin/bash의 의미
참고링크
관련 링크
- 운영체제와 커널의 차이
- bash란? #!/bin/bash의 의미
- bashrc와 bash_profile의 차이
- 컴파일러와 인터프리터의 차이
- 리다이렉션, 파이프의 개념
- 크론탭(crontab)을 이용한 작업 스케쥴링
1. bash란?
리눅스에서는 Bourne shell(/bin/sh), bash shell(/bin/bash)을 사용하는데 bash를 더 많이 사용합니다. 참고로 bash쉘은 Bourne shell의 기능을 향상시킨 버전으로 bash는 Brourne Again Shell)의 줄임말입니다. /bin/sh와 /bin/bash는 거의 비슷하지만 bash에 기능이 몇가지 더 추가된 형태입니다. 맥북에서는 zsh을 많이 사용합니다.
2. shell 이란?
shell은 프로그램(program)입니다. 프로그램에는 사용 목적, 기능이 있는데 shell이라는 프로그램은 어떤 기능이 있는걸까요? shell은 운영 체제 속 내용물에 접근할 수 있는 기능을 제공하는 프로그램 입니다. 즉 shell을 이용하면 운영체제와 상호작용할 수 있다는 의미입니다.
shell에는 크게 두가지 종류가 있는데 CLI와 GUI로 나눌수 있습니다. CLI(Command Line Interface)는 bash와 같이 검은색 창에서 명령어를 입력하는 방식을 통해 운영체제와 상호작용할 수 있습니다. GUI(Graphical User Interface)는 윈도우나 맥과 같이 예쁜 화면에 아이콘을 클릭하는 방식으로 운영체제와 상호작용하는 방식을 의미합니다. 물론 윈도우나 맥에서도 CLI를 제공하니 어느쪽을 사용할지 선택할 수 있습니다.
3. 스크립트(script)란?
스크립트란 인터프리터(interpreter) 방식으로 동작하는 코드를 의미합니다.
3. bash는 프로그래밍 언어인가?
bash는 프로그래밍 언어입니다. 즉, 흔히 말하는 bash script란 bash 프로그래밍 언어로 쓰여진 프로그램 코드를 의미합니다.
10. #!/bin/bash의 의미
쉘 스크립트를 작성할때 가장 첫 줄에 #!/bin/bash라는 문구를 쓰게 되는데 이것의 의미는 bash 쉘을 사용하겠다는 의미입니다.
일반적으로 #는 주석이지만 #!와 같이 느낌표와 함께 쓰이면 이것은 느낌표가 아닙니다. #!는 셔뱅(shebang)이라고 부르고, #! 다음에 오는 문구를 실행합니다. 예를 들어 #!/bin/bash라고 쓰면 스크립트가 실행되면 /bin/bash부터 실행하게 됩니다. 따라서 /bin/bash 이후에 나오는 명령어는 bash를 이용해서 해석할 것이라는 의미입니다.
11. 사용법
예를 들어 다음과 같은 pred_batch.sh
파일을 생성한다고 해보겠습니다.
#!/bin/bash
# activate pyenv
source /home/dlit/.bashrc
source /home/dlit/.profile
pyenv activate py3_9_8
cd /home/dlit/work/living_paradise/daily_batch
nohup python ./daily_predict.py > /dev/null 2>&1 &
#python ./daily_predict.py
source deactivate
위 파일을 생성했으면 권한을 777로 바꿔줍니다.
$ chmod 777 pred_batch.sh
위와 같이 권한을 777로 바꿔주면 파일이 초록색으로 변합니다.
$ bash ./pred_batch.sh
그리고 위와 같이 bash
명령어를 이용해 sh파일을 실행합니다.
참고로 bash
가 아니라 sh
명령어를 사용하면 pred_batch.sh
파일이 실행 안될수도 있으니 주의 부탁드립니다.