쉘 스크립트의 실행 모드를 제어하는 ​​방법은 무엇입니까?

쉘 스크립트의 실행 모드를 제어하는 ​​방법은 무엇입니까?

특정 스크립트를 사용하려는 사용자가 특정 실행 형식을 따르도록 제한하고, 스크립트를 따르지 않으면 화면에 오류 메시지를 출력하고 싶습니다. 사용자가 다음 형식으로만 스크립트를 실행하기를 원합니다.

$ bash script.sh

다른 형식으로 실행하려고 하면

$ sh script.sh

$./script.sh

스크립트 실행 방법에 대한 지침이 포함된 오류 메시지를 인쇄하고 싶습니다.

답변1

#!/bin/echo Run this script with: bash

if ! [ "$BASHOPTS" ]
then
    echo Run this script as bash script.sh
    exit 1
fi
... rest of script here ...

이는 쉘 인터프리터 대신 바이너리를 ./script.sh호출하고 첫 번째 줄에 메시지를 인쇄한 후 스크립트 이름을 인쇄 하는 (유용한) 실행 사용을 방지합니다 .echo

Bash가 아닌 쉘에서 실행하거나 Bash를 POSIX 모드에서 실행하는 경우(Bash의 경우와 마찬가지로 sh) BASHOPTS이 변수는 거의 확실하게 설정되지 않으며 본체가 if실행되고 메시지를 인쇄하며 오류와 함께 종료됩니다.

sh;로 사용하면 Series 4 Bash 버전에서 작동합니다. 이전 버전의 경우 아마도 if ! [ "$BASH" ] || ! [ "${BASH##*/}" = "bash" ]가장 좋은 방법은 인터프리터 경로가 로 시작하는지 확인하는 것입니다 /bash. sh시스템이 Bash가 아닌 경우 확인하는 것만으로도 $BASH충분합니다.

솔직히 말해서 당신은 아마도 잘못된 문제를 해결하고 있다고 생각합니다. 그러나 이것은 당신이 원하는 것을 해결할 것입니다.

관련 정보