디버그 구문 오류: '}' 예기치 않음('fi' 필요)

디버그 구문 오류: '}' 예기치 않음('fi' 필요)

방금 Ubuntu 서버에 (제공된 파일을 사용하여) 설치한 소프트웨어 서비스가 .deb시작되지 않습니다. 서비스를 실행할 때 오류가 발생합니다.

/etc/init.d/matrixsa: 44: Syntax error: "}" unexpected (expecting "fi")

이것은 스크립트의 관련 부분입니다. 쉘 스크립팅에 익숙하지 않아서 이것이 작동할지 모르겠습니다.

if [ -f /etc/rc.d/init.d/functions ]
then
    . /etc/rc.d/init.d/functions
else
    function action {
        echo "$1"
        shift
        $@
    } # <-- this is line 44
    function success {
        echo -n "Success"
    }
    function failure {
        echo -n "Failed"
    }
fi

답변1

$@함수를 갑자기 구문적으로 무효화하는 내용을 포함하여 무엇이든 포함할 수 있습니다. 대신 인용해 보세요. 깨지지 않는 스크립트 버전은 다음과 같습니다.

if [ -f /etc/rc.d/init.d/functions ]; then
    . /etc/rc.d/init.d/functions
else
    action() {
        printf '%s\n' "$1"
        shift
        "$@"
    }
    success() { printf Success ; }
    failure() { printf Failed ; }
fi

또는 이와 유사한 기능을 사용하는 경우 bash다음 기능을 사용할 수 있습니다 action.

action() {
    printf '%s\n' "$1"
    "${@:2}"
}

원본 스크립트처럼 IFS에서 분할되는 것이 중요한 경우(아마도 그렇지 않을 수도 있음) 인용을 해제하세요 $@.

Bash가 아닌 쉘에서 실행할 수도 있습니다. functionbashism입니다. 대신 사용하세요 func().

관련 정보