我有一个使用幻像js函数的shell脚本
Phantom JS函数在很多url上运行时显然崩溃,我试图重写它只做一次,但我得到一个错误,其中$ urlvariables不会改变,所以它总是拷贝相同的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!"
版本是应该做的一部分,它可能是致命的拧,因为我只是搞砸了一点点,我不知道我回到了以前的状态
#!/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!"
为什么不一次只做一个?
#!/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!"
这可能会给你一些想法(未经测试,但看起来是正确的)。 处理过程被移动到每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!"