私はスクリプトを持っています
index=0
while read line
do
echo "read line is $line"
line=`echo ${line}|awk '{print $1}'`
index=$((index+1))
if((index%2==0));then
echo "before continue line is $line"
continue
fi
echo "index is $index and now modify html page with $line"
...
...
done< infile
infile の内容は次のとおりです。
1OrMcP2CdV4 180
1Wp33RG2XaA 180
21zUUJ04ovI 180
2pIqUhaDMLg 180
2WRU4NUJSVc 180
...
...
infile には、自分で意図的に追加した別の null 行があります。これを行った理由はhttp://goo.gl/K7g0mを参照してください。これは、「while read」ループの別の奇妙な動作です。基本的に「read」は偶数行を正しく読めないので、偶数行を空行にしています。
スクリプトを実行すると、出力は次のようになります。
read line is 1OrMcP2CdV4 180
index is 1 and now modify html page with 1OrMcP2CdV4
read line is 1Wp33RG2XaA 180
before continue line is 1Wp33RG2XaA
read line is
index is 3 and now modify html page with
read line is 21zUUJ04ovI 180
before continue line is 21zUUJ04ovI
read line is
index is 5 and now modify html page with
したがって、基本的に、「while read loop」は次の順序で行を読み取るようです: 1 3 2 5 4
次に、ヌル行を次のように変更しました
1OrMcP2CdV4 180
Axxx
1Wp33RG2XaA 180
Axxx
21zUUJ04ovI 180
Axxx
2pIqUhaDMLg 180
Axxx
2WRU4NUJSVc 180
...
..
出力は興味深いです:
read line is 1OrMcP2CdV4 180
index is 1 and now modify html page with 1OrMcP2CdV4
read line is xxx
before continue line is xxx
read line is 1Wp33RG2XaA 180
index is 3 and now modify html page with 1Wp33RG2XaA
read line is xxx
before continue line is xxx
read line is 21zUUJ04ovI
index is 5 and now modify html page with 21zUUJ04ovI
read line is 21zUUJ04ovI 180
before continue line is 21zUUJ04ovI
OK、今は順番に読んでいますが、偶数行の「Axxx」は「xxx」と読み、最初の 20 行は順番どおりに見えますが、時々順番が乱れます!! 面白くて奇妙ですね。
この不正行為の何が問題になっていますか?スクリプトには、次のようないくつかのバックグラウンド コマンドがあります。
firefox &
tcpdump &
そしてまた好き
sleep 5
詳細については、上記のリンクを参照できますので、サブプロセスの同期の問題がある可能性がありますか? しかし、私はそうは思いません。
この問題は本当に奇妙で、私はそれに対処する方法について本当に途方に暮れています!