我有一个使用幻像js函数的shell脚本
Phantom JS函数在显然运行在太多网址时崩溃了,我试图将其重写为一次只做部分但是我得到一个错误,其中$ url变量没有改变所以它总是复制下来url虽然它似乎写下了网站的实际大小。
如果我可以通过那个光荣的错误得到帮助。
#!/bin/bash
echo "Importing URLs..."
file=sizeurls.csv
url=""
while IFS= read -r line
do
url+=" "
url+=$line
done < "$file"
echo "Gathering page sizes..."
phantomjs yslow.js --info basic --format plain $url | grep 'url\|size' > temp.txt
echo "Formatting data..."
sed -i 's/size://g' temp.txt
sed -i 's/url://g' temp.txt
paste - - -d, < temp.txt > pagesize.csv
echo "Done!"
应该一次做部分的版本,它可能会被致命地搞砸,因为我只是把它搞砸了一点d我不确定我是否把它归还给以前的状态
#!/bin/bash
echo "Importing URLs..."
file=sizeurls.csv
url=""
i=0;
while IFS= read -r line
do
while [ $i -le 10 ] #10 at a time i < 10
do
url+=" "
url+=$line
i=$((i+1));
done < "$file"
phantomjs yslow.js --info basic --format plain $url | grep 'url\|size' >> temp.txt
#echo "Formatting data..."
sed -i 's/size://g' temp.txt
sed -i 's/url://g' temp.txt
paste - - -d, < temp.txt >> pagesize.csv
done < "$file"
i = 0
echo "Done!"
答案 0 :(得分:1)
这可能会给你一些想法(未经测试,但看起来正确)。处理被移动到每10个URL调用一次的函数,如果有任何剩余的URL,则再次移动到最后。
#!/bin/bash
echo "Importing URLs..."
file=sizeurls.csv
rm pagesize.csv
ProcessURLs () {
echo "Gathering page sizes..."
phantomjs yslow.js --info basic --format plain $@ | grep 'url\|size' > temp.txt
echo "Formatting data..."
sed -i 's/size://g' temp.txt
sed -i 's/url://g' temp.txt
paste - - -d, < temp.txt >> pagesize.csv
}
url=""
count=0
while IFS= read -r line
do
url+="$line$ "
(( count++ ))
# Procss URLs in 10-URL chunks
if [[ $count -ge 10 ]] ; then
ProcessURLs $url
url=''
count=0
fi
done < "$file"
# Handle any remaining URLs
[ -n "$url" ] && ProcessURLs $url
echo "Done!"
答案 1 :(得分:1)
为什么不一次只做一个?
#!/bin/bash
echo "Importing URLs..."
file=sizeurls.csv
echo "Gathering page sizes..."
while IFS= read -r url
do
phantomjs yslow.js --info basic --format plain $url | grep 'url\|size'
done < "$file" > temp.txt
echo "Formatting data..."
sed -i -e 's/size://g' -e 's/url://g' temp.txt
paste - - -d, < temp.txt > pagesize.csv
echo "Done!"