Ich führe einen time dd
Befehl in einem Shell-Skript aus und möchte die Ergebnisse in eine Datei ausgeben und auf dem Bildschirm ausdrucken. Die Zeile, die ich derzeit ausführe, ist:
(time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count) >> $log_file 2>&1 &
Allerdings bleibt mir dann eine leere Datei und es erfolgt keine Ausgabe auf dem Bildschirm. Was müsste ich tun, um alle drei Dinge zu tun?
Beachten Sie, dass ich dies in einem eingebetteten System mit einer Busybox-Installation ausführe, diebeinhaltet nichttee
es handelt sich also nicht um ein Duplikat vondiese Frage.
Antwort1
Was Sie zeigen, funktioniert auf meinem System wie erwartet. Sind Sie sicher, dass Sie bash
und nicht verwenden sh
? Auf jeden Fall habe ich es mit dash
und mit busybox
's versucht sh
und da hat es auch funktioniert. In Ermangelung von ist die einzige Lösung meiner Meinung nach, nach Abschluss des Befehls tee
zu verwenden .cat $logfile
Eine andere Möglichkeit wäre, einen Link zu erstellen busybox
und tee
zu versuchen, diesen auszuführen. Das busybox
mit meinem Debian mitgelieferte unterstützt das, aber ich weiß nicht, ob Ihrs das tut:
ln -s /bin/busybox /bin/tee
Versuchen Sie dann, tee
normal zu laufen.
Wenn Sie es wirklich nicht bekommen können tee
, wäre Ihre einzige andere Option so etwas wie das hier:
foo=$( ( time dd if="file1" of="file2" bs=12 count=5 ) 2>&1 &)
echo "$foo"
echo "$foo" >> logfile
Antwort2
tee
Sie können den Befehl verwenden . Hier habe ich die Befehle gruppiert time
und dd
den Codeblock verwendet, sodass sie als einzelner Befehl behandelt werden und ihre Ausgabe problemlos verarbeitet werden kann.
{ time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count; } 2>&1|tee $log_file
Beachten Sie das ;
am Ende des zweiten Befehls. Dies ist zwingend erforderlich, damit Codeblöcke funktionieren.
Falls Sie es nicht verwenden möchten, tee
denken Sie vielleicht darüber nach
{ time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count; } 2>&1 &> $log_file;cat $log_file