Существуют ли какие-либо правила «no newline at eof» для сценариев bash?

У меня есть два файла, файл env и файл запуска. Когда я развертываю их в своем ящике Ubuntu Server, я получаю ошибку:

./start-admin: строка 10: синтаксическая ошибка: неожиданный конец файла

Если я развернусь, а затем добавлю новую строку в конец файла, она покажет ошибку. Если я удалю его, ошибка исчезнет. Если я снова развернусь и не добавлю новую строку, она все равно покажет ошибку, но если я добавлю новую строку, ошибка исчезнет. Что может быть причиной этого?

Ниже приведены мои сценарии:

ENV:

if [ "x${WD}" == "x" ]; then echo "missing required conf \"\${WD}\"" >&2; exit -1; fi export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64 export JAR_FILE="$WD/mfa-admin.jar" export MYSQL_URL=url1 export MYSQL_USER=root export MYSQL_PASSWORD=pwd export DB_URL=url2 export DB_USER=user export DB_PASSWORD=pwd2 export EMAIL_HOST=mail-inbox export EMAIL_PORT=25 export EMAIL_PERMISSION=false export FAKE_EMAIL=email export ACTIVATION_URL=url export BIND_HOST=0.0.0.0 export BIND_PORT=8282 

Начало:

 WD=`dirname $0`; JAVA_OPTS="" if [ -r "$WD/admin.env.conf" ]; then . $WD/admin.env.conf fi # required stuff if [ "x${JAVA_HOME}" == "x" ]; then echo "missing required conf \"\${JAVA_HOME}\"" >&2; exit -1; fi if [ "x${JAR_FILE}" == "x" ]; then echo "missing required conf \"\${JAR_FILE}\"" >&2; exit -1; fi if [ "x${MYSQL_URL}" == "x" ]; then echo "missing required conf \"\${MYSQL_URL}\"" >&2; exit -1; fi if [ "x${MYSQL_USER}" == "x" ]; then echo "missing required conf \"\${MYSQL_USER}\"" >&2; exit -1; fi if [ "x${MYSQL_PASSWORD}" == "x" ]; then echo "missing required conf \"\${MYSQL_PASSWORD}\"" >&2; exit -1; fi if [ "x${DB_URL}" == "x" ]; then echo "missing required conf \"\${DB_URL}\"" >&2; exit -1; fi if [ "x${DB_USER}" == "x" ]; then echo "missing required conf \"\${DB_USER}\"" >&2; exit -1; fi if [ "x${DB_PASSWORD}" == "x" ]; then echo "missing required conf \"\${DB_PASSWORD}\"" >&2; exit -1; fi if [ "x${EMAIL_HOST}" == "x" ]; then echo "missing required conf \"\${EMAIL_HOST}\"" >&2; exit -1; fi if [ "x${EMAIL_PORT}" == "x" ]; then echo "missing required conf \"\${EMAIL_PORT}\"" >&2; exit -1; fi if [ "x${EMAIL_PERMISSION}" == "x" ]; then echo "missing required conf \"\${EMAIL_PERMISSION}\"" >&2; exit -1; fi if [ "x${FAKE_EMAIL}" == "x" ]; then echo "missing required conf \"\${FAKE_EMAIL}\"" >&2; exit -1; fi if [ "x${ACTIVATION_URL}" == "x" ]; then echo "missing required conf \"\${ACTIVATION_URL}\"" >&2; exit -1; fi if [ "x${BIND_HOST}" == "x" ]; then echo "missing required conf \"\${BIND_HOST}\"" >&2; exit -1; fi if [ "x${BIND_PORT}" == "x" ]; then echo "missing required conf \"\${BIND_PORT}\"" >&2; exit -1; fi JAVA_OPTS="${JAVA_OPTS} -Dmysql.URL=\"${MYSQL_URL}\" " JAVA_OPTS="${JAVA_OPTS} -Dmysql.USER=\"${MYSQL_USER}\" " JAVA_OPTS="${JAVA_OPTS} -Dmysql.PASSWORD=\"${MYSQL_PASSWORD}\" " JAVA_OPTS="${JAVA_OPTS} -Ddb.URL=\"${DB_URL}\" " JAVA_OPTS="${JAVA_OPTS} -Ddb.USER=\"${DB_USER}\" " JAVA_OPTS="${JAVA_OPTS} -Ddb.PASSWORD=\"${DB_PASSWORD}\" " JAVA_OPTS="${JAVA_OPTS} -DEMAIL_HOST=\"${EMAIL_HOST}\" " JAVA_OPTS="${JAVA_OPTS} -DEMAIL_PORT=\"${EMAIL_PORT}\" " JAVA_OPTS="${JAVA_OPTS} -DEMAIL_PERMISSION=\"${EMAIL_PERMISSION}\" " JAVA_OPTS="${JAVA_OPTS} -DFAKE_EMAIL=\"${FAKE_EMAIL}\" " JAVA_OPTS="${JAVA_OPTS} -DACTIVATION_URL=\"${ACTIVATION_URL}\" " JAVA_OPTS="${JAVA_OPTS} -DBIND_HOST=\"${BIND_HOST}\" " JAVA_OPTS="${JAVA_OPTS} -DBIND_PORT=\"${BIND_PORT}\" " JAVA="$JAVA_HOME/bin/java" eval \"$JAVA\" $JAVA_OPTS -cp "${WD}:${JAR_FILE}" VertxNode 

Когда я получил это сообщение, это результат несогласованных строк ` , ' или " в скрипте. Иногда это также происходит с несоответствующими if / then / fi, do / while или case / esac. Я бы сильно внимательно изучите свои сценарии.