デバッグ構文エラー:「}」予期しない(「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()

関連情報