2015-04-28 2 views
0

Я пытаюсь написать сценарий для автоматизации вытягивания, рендеринга и нажатия на документ LaTeX с/на репо. Вытягивание/нажатие не проблема, но для начала рендеринга я хотел бы проверить, изменились ли файлы .tex с момента последнего обновления (переменная oldHash содержит информацию). Проблема в том, что когда я выполняю код, переменная счетчика сбрасывается до 0 после выхода цикла. Вот код:Невозможно изменить переменную счетчика

#!/bin/bash 

##### PULL FROM THE REPO AND SAVE THE HASH ##### 

# Get the diff between the two commits 
diffFiles=$(git diff --name-only "$oldHash" [email protected]{0}) 

# The commmand produces the following output: 
# Chapters/Chapter6.tex 
# Other/CustomEnvironments.tex 
# RawMaterial/LinearAlgebraNotes_4.pdf 
# buildAll.sh 
# main.tex 

numberOfTexFiles=0 

# Loop through every line of the output and strip the files from their extension 
printf %s "$diffFiles" | while IFS= read -r line 
do 
    baseName=$(basename "$line") 
    extension="${baseName##*.}" 
    if [[ "$extension" == 'tex' ]]; then 
     # If the file is a Tex, update the counter 
     numberOfTexFiles=$(($numberOfTexFiles+1)) 
     echo $numberOfTexFiles 
    fi 
done 

echo $numberOfTexFiles 

if [ $numberOfTexFiles -gt 0 ]; then 
    echo "FILES HAVE CHANGED" 
    # Run some other stuff (namely pdflatex) 
else 
    echo "NOTHING CHANGED" 
fi 

Что теперь происходит то, что последний, если заявления оценить ложь, и команда pdflatex никогда не вызывается. Как я могу это исправить?

EDIT

Как было предложено JID, перенаправлять все, что мне было нужно. Это мое решение:

while IFS= read -r line 
do 
    baseName=$(basename "$line") 
    extension="${baseName##*.}" 
    if [[ "$extension" == 'tex' ]]; then 
     # If the file is a Tex, update the counter 
     numberOfTexFiles=$(($numberOfTexFiles+1)) 
     echo $numberOfTexFiles 
    fi 
done <<< $(printf %s "$diffFiles") 
+0

не вставлять в цикл while использовать 'done <(command)' вместо 'command | в то время как '. Это задавали бесчисленные времена. поиск 'bash while circle scope' в google для получения дополнительной информации. –

ответ

-1
if [[ "$extension" == 'tex' ]]; 

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

+1

Точка с запятой * * требуется, потому что 'then' следует за ней. – arco444

Смежные вопросы