我正在 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
並嘗試運行它。我的 Debian 附帶的支持這一點busybox
,但我不知道你的是否會:
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