LINUX.ORG.RU

подскажите как найти ошибку в bash скрипте?


0

1

привет.

имеется скрипт содержащий более 2000 строк. произвел некоторые изменения в нем, и теперь при запуске получаю: line 2154: syntax error: unexpected end of file

но строка 2154 - это последняя строка файла. мне так кажется, что я где-то пропустил закрытие блока/скопа. но уже битый час ничего не могу найти.

скажите, есть ли какой-то способ заставить bash показать номер строки в которой он открывается этот самый незакрытый скоп/блок?

благодарен.

★★★

Воспользуйтесь редактором, который подсвечивает синтаксис, достаточно неплох geany.

Он создаёт структуру блоков кода, которые можно сворачивать и разворачивать, так же подсвечивает не закрытые логические блоки.

kostik87 ★★★★★
()
Ответ на: комментарий от vurdalak

kate использую. он подсвечивает парные скобки и блоки. и все равно немогу найти ошибку.

возможно, все же, ошибка не в отсутствии закрывающейся скобки?..

niXman ★★★
() автор топика

Либо цикл не закрыл, либо fi забыл

xorik ★★★★★
()
Ответ на: комментарий от niXman

Возьми вим, сделай pretty formatting им. gg=GZZ если что. Ну и по подсветке будет видно, если кавычку забыл закрыть или что подобное.

x3al ★★★★★
()

diff с последней рабочей версией

sdio ★★★★★
()
Ответ на: комментарий от niXman

Возможно, не скобку, а блок какой не закрыл.

vurdalak ★★★★★
()

а если поделить скрипт на фрагменты и начать их по отдельности запускать?

anonymous
()
Ответ на: комментарий от niXman

Самое простое сделать бекап и удалять по блочно код, смотреть где ошибка.

Punk
()

Смотреть глазами наличие всех fi, esac, done.

Самый простой вариант это сделать - погрепать по if, case, for, сделать wc -l, затем погрепать по fi, esac, done, сделать wc -l.

Если отличается - ошибку будет найти уже проще.

zhuravlik ★★★★
()

Сбербанк в таких случаях прибегает к краудсорсингу, чем ты хуже
Выкладывай скрипт, чо уж там

zolden ★★★★★
()
Ответ на: комментарий от anonymous

собственно, так и пытаюсь сделать. уже удалось определить функцию в которой происходит ошибка.

расследование продолжается...

niXman ★★★
() автор топика

echo «debug dump»

вставляй в нужные места и всё заработает

dimon555 ★★★★★
()
Ответ на: комментарий от niXman

таки да, закрывающуюся скобку пропустил. kate при этом вроде валидно подсвечивала блоки и парные скобки, но это не помогло. нашел глазами.

всем спасибо.

зы: тему создал с надеждой, что есть какой-то волшебный ключик для bash, который покажет и расскажет о причине ошибки =)

niXman ★★★
() автор топика

Добавляете в начало:

set -x

смотрите.

juk4windows
()
Ответ на: комментарий от unanimous

нет, не помогает.

ну да ладно..

niXman ★★★
() автор топика

Баш не нужен. В питоне такого бы не случилось.

anonymous
()

sh -x

И да, ты где-то забыл либо ' либо ", либо <<EOF

vahtu
()
Ответ на: комментарий от niXman

баш всё таки практический инструмент ( и как следствие многосотстрочные башфайлы - это специфический продукт - для этого всёж tcl ежель не ещё какой язык управления заданиями)

при таких ошибках помогает свой башевый парсер

qulinxao ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.