Ich möchte eine Datei von einem bestimmten Versatz bis zum Ende dieser Datei lesen.
Ich muss die Anzahl der Bytes abrufen, die während des Prozesses gelesen wurden, und auch die Ausgabe der Datei an eine andere Stelle umleiten.
Hier ist mein Skript:
...some stuff here...
dd if=$file bs=1 skip=$skippedBytes | tee >(wc --bytes > $file.count) >(cat - >> $file.output) | $($exportCommandString $file)
byteCount=$(cat $file.count)
rm $file.count
echo "Number of read bytes: $byteCount"
Ich möchte, dass der Teil "wc --bytes" seinen zurückgegebenen Wert in eine Variable einfügt, damit ich ihn später verwenden kann, ohne eine Datei ($ file.count) zu verwenden.
Etwas wie:
dd if=$file bs=1 skip=$skippedBytes | tee >(byteCount=$(wc --bytes)) >(cat - >> $file.output) | $($exportCommandString $file)
echo "Number of read bytes: $byteCount"
Abgesehen davon hängt mein Skript und funktioniert nicht.
Ist das möglich und wie?
Antworten:
Sie können einen kleinen Hack mit Weiterleitungen verwenden:
Es leitet alle Ausgaben auf 3 um, die Sie mit exec erstellt haben, und gibt sie am Ende wieder auf eins zurück.
Sie müssen auch die gesamte Ausgabe von $ exportCommandString nach / dev / null umleiten, da sie sonst mit der wc-Ausgabe gemischt wird.
Alle stderr funktionieren wie gewohnt, es gibt keine Änderungen.
ps: du kannst
tee -a file
statt verwendentee >(cat - >> file))
.pps: Sie können keine Variablen aus der Subshell exportieren, die immer erstellt wird, wenn Pipe
|
in Bash oder verwendet wird$()
. Es gibt also keine Möglichkeit, so etwas zu machenquelle
Vielleicht so etwas:
quelle