我正在 shell 脚本中运行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
?无论如何,我尝试了 withdash
和 with busybox
's sh
,它也在那里工作。在没有 的情况下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
答案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