调试语法错误:“}”意外(需要“fi”)

调试语法错误:“}”意外(需要“fi”)

我刚刚在 Ubuntu 服务器上安装(从提供的文件)的一个软件的服务.deb无法启动。运行服务时我收到错误:

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

这是脚本的相关部分。由于不熟悉 shell 脚本,我不知道这是否有效:

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 shell 中运行它。function是一个bashism,请改用func()

相关内容