source ***.sh 라고 하면,
***.sh 파일의 내용을 현재 shell에서 그대로 타이핑하는 것과 동일한 효과를 낸다.
( # 으로 시작하는 라인은 대부분 shell에서 주석 )
./***.sh 를 실행하는 경우에는
***.sh 파일의 첫줄에 #! 으로 시작하는 라인이 있다. ( shabang )
#!/bin/expect 가 있다고 하면 ./***.sh 라고 실행하면
/bin/expect ***.sh 라고 실행하는 것과 동일한 효과
shabang 라인이 없으면 디폴트쉘인 /bin/sh 이 실행
권한 요구 사항 차이의 이유는 스크립트를 해석하는 프로그램이로드되는 방법
- ./script.sh 쉘이 일반 실행 파일 인 것처럼 파일을 실행
쉘은 자체를 포크하고 시스템 호출 (예 :) execve을 사용하여 운영 체제가 분기 프로세스에서 파일을 실행.
운영 체제는 파일의 권한을 확인하고 (따라서 실행 비트를 설정해야 함) 요청을 프로그램 로더에 전달.
이 로더 는 파일을보고 파일을 실행하는 방법을 결정.
Linux에서 컴파일 된 실행 파일은 ELF 매직 번호로 시작하고 스크립트는 #!( hashbang )으로 시작 .
hashbang 헤더는 파일이 스크립트이며 hashbang 다음에 지정된 프로그램에서 해석해야 함을 의미.
이를 통해 스크립트 자체가 시스템에 스크립트 해석 방법을 알려줄 수 있다.
스크립트로, 프로그램 로더는 실행
/bin/bash및 전달할 ./script.sh 명령 줄 인수로.
- bash script.sh쉘을 실행 bash하고 script.sh명령 행 인수로 전달
운영 체제가로드
bash( script.sh명령 행 인수이기 때문에 조차 보지 않아도 된다.).
작성된 bash프로세스는 script.sh명령 행 인수로 전달 해석.
일반 파일 script.sh로만 읽기 때문에 bash실행 비트는 필요하지 않다.
./script.sh스크립트에 어떤 인터프리터가 필요한지 알 수 없으므로 그래도 사용하는 것이 좋다
'IT > Linux' 카테고리의 다른 글
[Linux] grep 명령어에서 AND, OR, NOT 조건 사용하기 (0) | 2020.10.13 |
---|