2013-06-19 3 views
1

У меня есть scritp, который собирает информацию о подкаталоге файлов. Я проверяю, что время между созданием файла равномерно.Получение переменной изнутри во время цикла

last=0 
LOGCHECK="YES" 
ls -l /dir/*.log | gawk '{print $8}' | sed s/:/*60+/g | bc | 
     while read fname 
     do 
      current=$fname 
      if [ $last = 0 ]; then 
       last=$current 
      elif [ $((current - last)) -ne 1 ]; then 
       echo "Time difference discrepancy: $((current - last)) minute(s) is not expected" 
       LOGCHECK="NO" 
       last=$current  
      else 
       last=$current 
      fi  
     done 

Это выводится только в том случае, если время между созданием файла .log составляет не одну минуту. Моя проблема в том, что $ LOGCHECK внутри цикла while находится в другом подоболочке, который я считаю из трубы?

Есть ли способ получить эту переменную информацию?

ответ

3

Это обычная ситуация с использованием скриптов bash. Перестройте свою петлю следующим образом:

while read fname 
do 
    # stuff 
done < <(ls -l /dir/*.log | gawk '{print $8}' | sed s/:/*60+/g | bc) 

Тогда переменные, установленные в цикле, по-прежнему будут доступны после этого.

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