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입니다. 스크립트가 해석 (소스)되고있는 경우 스크립트를 검사하는 코드가 인터프리터에 유효해야하기 때문에 항상 알 수는 없습니다. 통역사, 심지어 가장 통역사도 사용할 수 있습니다. 비교 : 스크립트가 소스인지 감지하는 방법 .