Intereting Posts
Как заставить скрипт bash выполнить определенное действие с ошибками команды _each_? pdftoppm (v 3.0) очень медленно конвертирует миниатюру в более новую версию Насколько безопасно увеличить tmpfs до большей, чем физической памяти? Массив Bash, объявленный в функции, недоступен вне функции Хранилище сертификатов Openssl p12 извлекает отдельные сертификаты, сохраняющие имена Что не так с экранированной новой строкой в ​​этой команде sed? Подключиться к LDAP с помощью cn = config в Debian Squeeze Как обходить фильтрацию маршрутных маршрутов (для ping)? Правило udev с аргументом KERNELS не работает Как сделать пароли пользователей отображаемыми как чистый текст в Linux? Странная регистрация ошибок в BBB Видео-инвертирование подсказки bash 64-битный Linux или 32-разрядный Linux с ядром PAE заставляет сервер x сбой при загрузке Проблемы с unixODBC и SQLite Удаление Firefox в RHEL5.8

Добавлять файл, выводить на экран и перенаправлять из stderr все сразу, без тройника

Я запускаю команду time dd в сценарии оболочки, и я хотел бы вывести результаты в файл и распечатать его на экране. Линия, которую я сейчас запускаю:

 (time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count) >> $log_file 2>&1 & 

Хотя это оставляет меня с пустым файлом и не выводит на экран. Что мне нужно сделать, чтобы сделать все три вещи?

Обратите внимание, что я запускаю это во встроенной системе с установкой Busybox, которая не включает tee поэтому это не дубликат этого вопроса .

То, что вы показываете, работает в моей системе как ожидается. Вы уверены, что используете bash а не sh ? В любом случае, я попробовал с dash и с busybox , и он тоже работал там. В отсутствие tee , я думаю, единственным решением будет cat $logfile после завершения команды.

Другой возможностью было бы сделать ссылку на busybox под названием 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 

Вы можете использовать команду 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