Помогите мне отладить ошибку синтаксиса: «}« неожиданно (ожидая «fi»)

Служба для части программного обеспечения, которое я только что установил (из предоставленного файла .deb ) на сервере Ubuntu, не запускается. При запуске службы я получаю сообщение об ошибке:

 /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 

$@ может содержать что угодно, даже вещи, которые делают вашу функцию неожиданно синтаксически недействительной. Ответить вместо этого. Ниже приведена менее критическая версия скрипта:

 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, как исходный скрипт (это, вероятно, нет), unquote $@ .

Также возможно, что вы запускаете это в оболочке без bash. function – это багизм, вместо этого используйте func() .