Я написал сценарий, который читает несколько строк имен файлов, из которых сценарий берет файл один за другим, и если имя файла заканчивается Java, то выполняется проверка pmd
по коду. Это была идея, с которой она была написана. Но возникает ошибка при выполнении сценария ниже, и строка, на которую он указывает, равна then
, которая является частью конструкции if
, используемой в пределах while
.Ошибка: использование в цикле while
$git diff origin/master..master --name-only
HelloWorld.java
. И да, я знаю, что мне, возможно, придется передать места для поиска и добавить это в $each_file
в сценарий.
Но в основном я хочу решить, почему этот скрипт возвращает ошибку, как показано ниже. Является ли ошибка результатом из-за кода соответствия шаблону i.e блоку if
?
Сценарий в целом должен запускать проверку на каждый измененный файл в репозитории pmd
. Если это поможет вам ответить на мой вопрос.
Сценарий отображается ниже:
#\bin\bash
changed_files=$(git diff origin/master..master --name-only)
export PATH=$PATH:pmd/bin
while read each_file
do
if[$each_file == *.java]
then
exec $(run.sh pmd -d $each_file -f text -R rulesets/internal/all-java.xml)
fi
done<$changed_files
Выход:
Syntax error: "then" unexpected (expecting "done")
вы пропустили пробел после 'if' – hek2mgl
... и после' ['и before'] '. И ваш shebang сломан. И вы уверены, что хотите использовать 'exec' * и *' $() '? – Biffen
попробуйте 'help [' ...это команда, а не элемент синтаксиса в bash – hek2mgl