Dis*_*oat 6 shell-script services
我刚刚.deb在 Ubuntu 服务器上安装(从提供的文件)的某个软件的服务将无法启动。运行服务时出现错误:
/etc/init.d/matrixsa: 44: Syntax error: "}" unexpected (expecting "fi")
Run Code Online (Sandbox Code Playgroud)
这是脚本的相关部分。不精通 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
Run Code Online (Sandbox Code Playgroud)
Chr*_*own 13
$@可以包含任何内容,甚至是使您的函数突然在语法上无效的内容。而是引用它。这是脚本的一个不易损坏的版本:
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
Run Code Online (Sandbox Code Playgroud)
如果您正在使用bash或类似,您可以使用以下作为action函数:
action() {
printf '%s\n' "$1"
"${@:2}"
}
Run Code Online (Sandbox Code Playgroud)
如果它像原始脚本一样在 IFS 上拆分很重要(可能不是),请取消引用$@。
您也可能在非 bash shell 中运行它。function是一种bashism,请func()改用。