![#!/bin/bash를 스크립트에 넣었지만 ksh를 스크립트로 사용하면 어떻게 되나요? [복사]](https://linux55.com/image/133208/%23!%2Fbin%2Fbash%EB%A5%BC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EB%84%A3%EC%97%88%EC%A7%80%EB%A7%8C%20ksh%EB%A5%BC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A1%9C%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%90%98%EB%82%98%EC%9A%94%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
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
변수에서 바이너리 파일을 찾아 바이너리 파일을 로드하고 파일 이름을 바이너리 파일에 인수로 제공합니다.