我试图让这个过程有很多文件,但我不想看看它,所以我不必监视它。
#!/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
我的循环中有什么导致无限?
答案 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