shebang스크립트를 실행하는 데 사용할 인터프리터를 제공하기 위해 행을 사용할 수 있습니다 .
#!/bin/bash
echo "Hello world"
내 질문은 어떤 인터프리터가 실제로 사용되는지 스크립트에서 어떻게 결정할 수 있는지입니다. 다음은 작동하지 않습니다.
echo $0
echo $SHELL
@KamilMaciorowski Nope; shebang은 예를 들어 스크립트를 실행하여 대체됩니다.
—
Gordon Davisson
sh scriptname이는 shebang을 무시하고 "sh"가 처음 인 스크립트를 실행합니다 $PATH.
내가 스크립트처럼 실행 @Gordon
—
Kamil Maciorowski
./scriptname, 파일, 실행 가능해야 ps -e보여줍니다 scriptname. 나는 스크립트를 해석 sh scriptname하여 파일이 실행 가능하지 않을 수 있음을 ps -e보여줍니다 sh. 이 두 가지 방법의 이름을 지정하는 방법은 관련이 없습니다. 나의 주요 요점은이 특정 통역사에 대한 준비가되어 있지 않으면 통역사 내에서 통역사에게 알리는 것이 불가능하다는 것입니다. 나에게 감지 스크립트보기 bash로 실행할 때 bash, 감지 python와 함께 실행할 때 python와 감지 bazbaz와 함께 실행할 때 bazbaz(너희가 알지 못하는 통역). 모든 아이디어가 잘못되었습니다.
/bin/bash에서 Bash가 아닌 한 Bash입니다. 스크립트가 해석 (소스)되고있는 경우 스크립트를 검사하는 코드가 인터프리터에 유효해야하기 때문에 항상 알 수는 없습니다. 통역사, 심지어 가장 통역사도 사용할 수 있습니다. 비교 : 스크립트가 소스인지 감지하는 방법 .