2

ファントムjs関数を使用したシェルスクリプトがあります

Phantom JS 関数は、あまりにも多くの URL で実行されるとクラッシュするようです。一度に一部だけ実行するように書き直そうとしましたが、$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!"

一度に一部を実行することになっているバージョンですが、少しいじっただけで致命的に台無しになる可能性があり、以前の状態に戻したかどうかはわかりません

#!/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!"
4

2 に答える 2

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!"
于 2013-02-19T20:00:05.950 に答える
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!"
于 2013-02-19T19:55:13.790 に答える