0

私は bash スクリプトを書くのはまったく初めてですが、ほぼ完璧に機能するスクリプトを書くことができ、自分自身を本当に誇りに思っています。しかし、私にはこの問題があり、なぜそれが機能しないのかわかりません。私の現在のコードの一部はこれです:

for begin in 1 51
do 
    echo -e "$begin"
    url="http://something&start-index=$begin&something"

    wget -O $HOME/Music/YoutubePlaylist/output$begin.txt $url 2>&1

    cat output1.txt > output.txt

    if ! [[ "$begin" = 1 ]]
        then
        cat output$begin.txt >> output.txt
    fi

done

それは完全に機能します。

ただし、最初の行に 101 を追加すると、機能しません。理由はありますか?一時ファイルを見ると実際に行うことは、output1.txt にあるものだけを output.txt に書き込み、他には何も書き込みません。

PS: output1.txt と output51.txt は空ではありませんが、output101.txt は空です。ヒントになるかも……。

4

2 に答える 2

1

cat output1.txt > output.txtoutput.txtラップごとに上書きしています。

代わりにこれを実行してください (問題を修正するだけoutput.txtです):

rm -f output.txt # if it should start with an empty file

for begin in 1 51
do 
  echo -e "$begin"
  url="http://something&start-index=$begin&something"

  wget -O $HOME/Music/YoutubePlaylist/output$begin.txt $url 2>&1

  cat output$begin.txt >> output.txt
done
于 2013-02-19T12:37:21.717 に答える
0

このようなオプションは問題なく機能するはずです。

for begin in 1 51 101
do
 echo -e "$begin"
 ...
done

wget -O $HOME/Music/YoutubePlaylist/output$begin.txt $url 2>&1 存在するかどうかを確認しましたか?コマンドラインから実行して結果を確認していただけますか?例えば

$wget -O $HOME/Music/YoutubePlaylist/output101.txt $url 2>&1

よろしく

于 2013-02-19T10:35:14.260 に答える