shebang 연산자는 스크립트를 실행하는 데 어떤 쉘이 사용될지 알려줍니다. 다음과 같은 경우에는 어떻게 되나요?
#!/bin/bash
"ksh script_name"을 입력하면 어떻게 되나요?
답변1
입력하시면 해당 파라메타로 실행 ksh script_name
됩니다 . 이는 ksh에 의해 실행된다는 의미입니다. shebang은 스크립트를 명시적으로 실행할 때만 중요합니다(예 : ).ksh
script_name
./script_name
답변2
짧은 답변: ksh는 스크립트를 실행하고 이를 #!/bin/bash
주석으로 처리합니다.
설명하다: bash 또는 모든 쉘은 실행을 위해 실행 파일이 호출될 때마다 exec()
시스템 호출을 호출합니다.
exec()
파일을 로드하고 파일의 처음 16비트를 확인하여 실행 가능한 형식을 확인합니다. #!이 발견되면 파일의 첫 번째 줄의 나머지 부분을 사용하여 시작해야 하는 프로그램을 찾고 시작하려는 파일(스크립트)의 이름을 인터프리터의 마지막 인수로 제공합니다.
Shebang에 지정된 인터프리터가 스크립트를 실행하는 방법입니다.
그러나 ksh를 지정하고 인수를 제공하면 exec는 shebang을 검색하지 않지만 쉘은 $PATH
변수에서 바이너리 파일을 찾아 바이너리 파일을 로드하고 파일 이름을 바이너리 파일에 인수로 제공합니다.