Erro de sintaxe de depuração: “}” inesperado (esperando “fi”)

6

O serviço para um software que acabei de instalar (de um arquivo .deb fornecido) em um servidor Ubuntu não será iniciado. Ao executar o serviço, recebo o erro:

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

Aqui está a parte relevante do script. Não sendo versado em scripts de shell, não sei se isso é válido:

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
    
por DisgruntledGoat 07.12.2011 / 13:03

1 resposta

13

$@ pode conter qualquer coisa, até mesmo coisas que tornam sua função de repente sintaticamente inválida. Cite isso em seu lugar. Aqui está uma versão menos quebrável do script:

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

Se você estiver usando bash ou similar, poderá usar o seguinte como a função action :

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

Se for importante que ele se divida no IFS como o script original (provavelmente não é), desmarque $@ .

Também é possível que você esteja executando isso em um shell não bash. function é uma base, use func() .

    
por 07.12.2011 / 13:12