Sie möchten \ n (== 0x0a == LF == Zeilenvorschub) als read
Trennzeichen \r
festlegen, nicht (== 0x0d == CR == Wagenrücklauf). Entweder das oder stellen Sie sicher, dass Sie eine CR am Ende Ihrer Pastebin-Datei einfügen. Anscheinend fehlt in Ihrer Pastebin-Datei am Ende der letzten Zeile eine Zeilenabschlusssequenz, sodass die letzte Zeile niemals in Ihr Skript eingegeben wird.
$ curl -s http://pastebin.com/raw/uHZ0PZjm | hexdump -C | tail -n 8 ...(snip)... 000013e0 35 30 39 35 31 36 0d 0a 32 30 38 34 39 36 30 33 |509516..20849603| 000013f0 39 38 30 31 33 34 30 30 31 37 32 33 39 33 30 36 |9801340017239306| 00001400 37 31 36 36 36 38 32 33 35 35 35 32 34 35 32 35 |7166682355524525| 00001410 32 38 30 34 36 30 39 37 32 32 0d 0a 35 33 35 30 |2804609722..5350| 00001420 33 35 33 34 32 32 36 34 37 32 35 32 34 32 35 30 |3534226472524250| 00001430 38 37 34 30 35 34 30 37 35 35 39 31 37 38 39 37 |8740540755917897| 00001440 38 31 32 36 34 33 33 30 33 33 31 36 39 30 |81264330331690| 0000144e
Beachten Sie, dass zwischen jeder Zahl ein 0x0d0a (CR LF) steht, nicht jedoch nach der letzten.
$ while read -r -d $'\r' line; do echo $line; done <<< "$(curl -s http://pastebin.com/raw/uHZ0PZjm)" | tail -n 3 77158542502016545090413245809786882778948721859617 72107838435069186155435662884062257473692284509516 20849603980134001723930671666823555245252804609722
Beachten Sie, dass die letzte Zahl, 535 [...] 690, fehlt, wenn Sie Ihren read
Befehl ausführen . Wenn Sie Ihr Trennzeichen jedoch auf das Zeilenumbruch-Zeichen Unix-native LF (\ n) umstellen, wird die letzte Zeile eingefügt:
$ while read -r -d $'\n' line; do echo $line; done <<< "$(curl -s http://pastebin.com/raw/uHZ0PZjm)" | tail -n 3 72107838435069186155435662884062257473692284509516 20849603980134001723930671666823555245252804609722 53503534226472524250874054075591789781264330331690
Zum Hinzufügen bearbeitet: Hier ist ein Fix, der die CRs in der Pastebin-Datei behandelt. Ich habe gesagt read
, CRLF als Trennzeichen zu verwenden, und ein zusätzliches Echo verwendet, um eine CRLF nach der Pastebin-Datei hinzuzufügen.
sum=0 while read -r -d $'\r\n' line; do sum=$(echo $sum + $line | bc) done <<< $(curl -s http://pastebin.com/raw/uHZ0PZjm; echo -e "\r\n") echo "$"