zsh进程文件脚本

时间:2014-11-20 21:52:42

标签: loops unix zsh

我试图让这个过程有很多文件,但我不想看看它,所以我不必监视它。

#!/usr/local/bin/zsh
X=${1-20}
for (( N=1; N<=X; N++ )); do
        for p in *.xml; do
                    curl -X POST -H "Content-Type:application/xml"  -d "@${p}" "https://url /postAPI" > "post_${p}"
                        sleep 1
                done
        done

在做./work.sh 5时,这将永远循环!

导致无限循环的原因是什么?

根据以下评论进行修改

/tmp/tmp.KeFYeM9Z % ls -l
total 4
-rwxr-xr-x  1 naes  wheel  218 Nov 20 14:42 work.sh

#!/usr/local/bin/zsh
X=${1-20}
for (( N=1; N<=X; N++ )); do
        for p in /tmp/tmp.u6RnKaJ3/*.xml; do
                    curl -X POST -H "Content-Type:application/xml"  -d "@${p}" "https://url /postAPI"
                        sleep 1
                done
        done

这仍然是无限循环

这不是:

 % cat work1.sh
#!/usr/local/bin/zsh
X=${1-20}
for (( N=1; N<=X; N++ )); do
        date
        sleep 1
done



% ./work1.sh 5
Thu Nov 20 15:22:27 PST 2014
Thu Nov 20 15:22:28 PST 2014
Thu Nov 20 15:22:29 PST 2014
Thu Nov 20 15:22:30 PST 2014
Thu Nov 20 15:22:31 PST 2014

我的循环中有什么导致无限?

1 个答案:

答案 0 :(得分:3)

您正在写入您正在阅读的同一目录。因此,在读取xml文件时,您正在编写xml文件,使其基本上永远循环。虽然它不是一个无限循环,但它是一个非常大的循环。

我们假设您有10个文件,在这种情况下您会得到以下结果:

N=1: |p| = 100
N=2: |p| = 200
N=3: |p| = 400
N=4: |p| = 800
N=5: |p| = 1600

所以......它的速度非常快。

这应该可以解决问题:

#!/usr/local/bin/zsh

X=${1-20}
OUTPUT_DIR=/tmp/output/
mkdir -p $OUTPUT_DIR

cd /tmp/tmp.u6RnKaJ3
for (( N=1; N<=X; N++ )); do
    echo "Attempt $N"

    for p in *.xml; do
        curl -X POST -H "Content-Type:application/xml"  -d "@${p}" "https://url /postAPI" > "${OUTPUT_DIR}post_${p}"
        sleep 1
    done
done