Я серьезно сомневаюсь, что может быть какой-либо статический анализ кода, выполненный для сценариев оболочки - особенно из-за того, что сценарии оболочки должны вызывать внешние программы и основаны на том, что они возвращаются внешние программы - и существует множество внешних программ и состояний внешней среды. Это похоже на проблему статического анализа кода, в значительной степени основанного на eval
-подобном механизме, но сценарии оболочки - это все о программировании в стиле eval.
Однако, есть некоторые общие указатели, которые могут оказаться полезными для «правильной» проверки, покрытия кода и документирования сценариев оболочки, как это делают основные языки:
Вы всегда можете запустить скрипт с опцией -x
(AKA xtrace
) - он выведет трассировку, похожую на эту, в stderr:
+ log_end_msg 0
+ [ -z 0 ]
+ retval=0
+ log_end_msg_pre 0
+ :
+ log_use_fancy_output
+ TPUT=/usr/bin/tput
+ EXPR=/usr/bin/expr
+ [ -t 1 ]
+ [ xxterm != x ]
+ [ xxterm != xdumb ]
Bash позволяет перенаправить этот поток на внешний FD (используя переменную BASH_XTRACEFD ) - на практике разбирать его намного проще.
Это не тривиально, но можно написать программу, которая будет находить соответствующие фрагменты кода, выполняемые с использованием вывода xtrace, и делать вам фантастический отчет о «покрытии кода» - как то, что называлось сколько раз, какие фрагменты кода вообще не выполнялись и поэтому не имеют покрытия для тестирования.
На самом деле, уже есть замечательный инструмент под названием shcov , который уже использует этот процесс - хотя он несколько упрощен и не очень хорошо обрабатывает все возможные случаи (особенно когда мы говорим о длинные и сложные линии)
И последнее, но не менее важное: есть минималистичный проект shelldoc (похожий на javadoc ), который помогает генерировать документацию на основе комментариев в сценариях оболочки. Да, это бесстыдная вилка:)