![调试语法错误:“}”意外(需要“fi”)](https://linux22.com/image/19339/%E8%B0%83%E8%AF%95%E8%AF%AD%E6%B3%95%E9%94%99%E8%AF%AF%EF%BC%9A%E2%80%9C%7D%E2%80%9D%E6%84%8F%E5%A4%96%EF%BC%88%E9%9C%80%E8%A6%81%E2%80%9Cfi%E2%80%9D%EF%BC%89.png)
我刚刚在 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()
。