Я запускаю time dd
команду в скрипте оболочки и хочу вывести результаты в файл и напечатать их на экране. Строка, которую я сейчас запускаю, это:
(time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count) >> $log_file 2>&1 &
Хотя это оставляет меня с пустым файлом и не выводит на экран. Что мне нужно сделать, чтобы сделать все три вещи?
Обратите внимание, что я запускаю это во встроенной системе с установленным Busybox, котораяне включаетtee
так что это не дубликатэтот вопрос.
решение1
То, что вы показываете, работает как и ожидалось в моей системе. Вы уверены, что используете bash
и не sh
? В любом случае, я пробовал с dash
и с busybox
's sh
, и это сработало там тоже. При отсутствии tee
, я думаю, единственным решением будет cat $logfile
после завершения команды.
Другой возможностью было бы сделать ссылку на busybox
called tee
и попытаться запустить его. Тот, busybox
что идет с моим Debian, поддерживает это, но я не знаю, будет ли ваш:
ln -s /bin/busybox /bin/tee
Затем попробуйте бежать tee
в обычном режиме.
Если вы действительно не можете получить tee
, то единственным вариантом будет что-то вроде этого:
foo=$( ( time dd if="file1" of="file2" bs=12 count=5 ) 2>&1 &)
echo "$foo"
echo "$foo" >> logfile
решение2
Вы можете использовать tee
команду. Здесь я сгруппировал команды time
и dd
использую блок кода, чтобы они воспринимались как одна команда, а их вывод можно было легко обработать.
{ time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count; } 2>&1|tee $log_file
Обратите внимание на ;
в конце второй команды. Это обязательно для работы блоков кода.
Если вы не хотите использовать tee
, то вы можете подумать об этом.
{ time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count; } 2>&1 &> $log_file;cat $log_file