循环时从内部获取变量

时间:2013-06-19 14:38:02

标签: bash variables pipe

我有一个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中,我相信管道?

有没有办法获取这个变量信息?

1 个答案:

答案 0 :(得分:3)

这是bash脚本的常见情况。像这样重构你的循环:

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

然后循环中设置的变量仍然可用。