2013-06-19 135 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文件之間的時間不是一分鐘時纔會輸出。我的問題是,while循環中的$ LOGCHECK在另一個子shell中,我相信從管道?

有沒有辦法獲得這個變量信息?

回答

3

這是bash腳本的常見情況。像這樣重構你的循環:

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

然後,循環中設置的變量仍然可用。