initiate () {
read -p "Location(s) to look for .bsp files in? " loc
find $loc -name "*.bsp" | while read
do
if [ -f "$loc.bz2" ]
then
continue
else
filcount=$[$filcount+1]
bzip $loc
fi
if [ "$scan" == "1" ]; then bzipint $loc
fi
echo $filcount #Correct counting
echo $zipcount #Correct counting
echo $scacount #Correct counting
echo $valid #Equal to 1
done
echo $filcount #Reset to 0
echo $zipcount #Reset to 0
echo $scacount #Reset to 0
echo $valid #Still equal to 1
}
Я пишу сценарий оболочки bash, чтобы использовать bzip2
для архивирования всех .bsp
файлов внутри каталога. В этом сценарии у меня есть несколько переменных для подсчета итогов (файлы, успешные zip-файлы, успешные проверки целостности), однако, похоже, я столкнулся с проблемой.
Когда у find $loc -name "*.bsp"
заканчиваются файлы для выхода while read
и while read
, он обнуляет $filcount
, $zipcount
и $scacount
(все они изменяются (увеличиваются) внутри initiate ()
, bzip ()
(который вызывается во время initiate ()
) или bzipint ()
(который также вызывается в initiate ()
).
Чтобы проверить, связано ли это с изменением переменных внутри initiate ()
или с другими функциями, доступными из него, я использовал echo $valid
, который определен вне initiate ()
(например, $filcount
, $zipcount
и т. д.), но не изменяется из-за другой функции внутри initiate ()
или внутри самого initiate ()
.
Интересно, что $valid
не сбрасывается в 0, как другие переменные внутри Initial.
Может ли кто-нибудь сказать мне, почему мои переменные волшебным образом сбрасываются при завершении чтения?