Ich verwende es, numfmt
um eine Remote-Datei Content-Length
von Bytes in das IEC-Format zu konvertieren, d. h.21M
$ curl -sI http://jruby.org.s3.amazonaws.com/downloads/1.7.12/jruby-bin-1.7.12.tar.gz|grep Length|cut -d' ' -f2|numfmt --from=auto --to=iec
'numfmt: invalid suffix in input: '21981488
Ich bin ratlos, warum numfmt sich über ein ungültiges Suffix beschwert. Wenn ich den Befehl aufteile, die Ausgabe von überprüfe cut
und den Wert manuell an echoe numfmt
, funktioniert es wie erwartet
$ curl -sI http://jruby.org.s3.amazonaws.com/downloads/1.7.12/jruby-bin-1.7.12.tar.gz|grep Length|cut -d' ' -f2 -
21981488
$ echo 21981488|gnumfmt --from=auto --to=iec
21M
Übersehe ich hier etwas?
Antwort1
Es scheint, dass die Ausgabe von curl
Wagenrückläufe enthält und dieNummeran die übergeben wird, numfmt
enthält eins. Sie können das vor der Übergabe an entfernen numfmt
:
curl ... | awk -F: '/Length/{sub("\r", "", $2); print $2}' | numfmt ...
Beachten Sie außerdem, dass grep
und cut
normalerweise durch einen anderen einzelnen Befehl ersetzt werden kann.
Antwort2
Es gab einen Fehler in coreutils-8.21, bei dem wir den fehlerhaften Inhalt nicht korrekt zitiert haben. Wenn Sie es mit der bereits veröffentlichten Version 8.22 ausführen, tritt ein offensichtlicherer Fehler auf:
numfmt: invalid suffix in input: ‘21981488\r’
Beachten Sie, dass Leerzeichen oder Tabulatoren nach der Zahl von numfmt ignoriert werden (da es isblank() verwendet). Um \r zu ignorieren, müsste jedoch isspace() verwendet werden. Ich denke, es ist richtig, nur Leerzeichen zu ignorieren.