내 우분투 서버에서 motd 스크립트를 수정하려고 합니다. /etc/update-motd.d/00-header
/etc/update-motd.d/01-sysinfo
/etc/update-motd.d/02-footer
왜냐하면 " "라는 이상한 이유로 이상한 구문 오류가 계속 발생하기 때문입니다. line 31: syntax error: unexpected end of file
그런데 코드가 없는 빈 공간을 가리키고 있어 정말 혼란스럽습니다.
또 다른 문제는 systemctl status motd를 입력할 때마다 화면에 이런 메시지가 표시된다는 것입니다.
Unit motd.service could not be found.
마스킹되는 프로세스에 문제가 있어서 이 링크의 솔루션을 사용했습니다.systemctl, 마스크 해제 방법.
나는 한동안 이 문제와 싸우고 있지만 문제를 해결하는 데 진전을 보이고 있으므로 도움을 주시면 감사하겠습니다.
파일 내용은 이 텍스트 아래에 있습니다.
#!/bin/sh
#
# 00-header - create the header of the MOTD Copyright (c) 2013 Nick Charlton Copyright (c)
# 2009-2010 Canonical Ltd.
#
# Authors: Nick Charlton <[email protected]>
# Dustin Kirkland <[email protected]>
#
# This program is free software; you can redistribute it and/or modify it under the terms
# of the GNU General Public License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with this
# program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
# Floor, Boston, MA 02110-1301 USA.
[ -r /etc/lsb-release ] && . /etc/lsb-release
if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
# Fall back to using the very slow lsb_release utility
DISTRIB_DESCRIPTION=$(lsb_release -s -d) fi
figlet $(Ourserver) printf "\n"
printf "Welcome to %s (%s).n" "$DISTRIB_DESCRIPTION" "$(uname -r)" printf "\n"
답변1
" line 31: syntax error: unexpected end of file
"은(는) 짝을 이루는 문자 수가 홀수이기 때문에 발생합니다. "쌍을 이룬" 문자란 반드시 일치하는 문자로 나타나야 하는 문자를 의미하며, 그 사이에 문자가 있을 수도 있습니다. 예를 들어, "
, '
, (
, [
, {
등입니다. 인용문 수를 계산하세요.
files="/etc/update-motd.d/00-header /etc/update-motd.d/01-sysinfo /etc/update-motd.d/02-footer"
grep --color=always -E "\"|'|\(|\[|\{|\}|\]|\)" $files
답변2
오류는 25번째 줄에서 발생한 것으로 보입니다.
25 DISTRIB_DESCRIPTION=$(lsb_release -s -d) fi
fi
a 또는 개행 문자 앞에 구분 기호가 있어야 합니다 ;
(적절한 들여쓰기가 유지되므로 후자를 제안합니다). 그래서
23 if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
24 # Fall back to using the very slow lsb_release utility
25 DISTRIB_DESCRIPTION=$(lsb_release -s -d)
26 fi