방금 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가 아닌 쉘에서 실행할 수도 있습니다. function
bashism입니다. 대신 사용하세요 func()
.