シェル スクリプトでコマンドを実行していてtime dd
、その結果をファイルに出力し、画面に表示したいと考えています。現在実行している行は次のとおりです。
(time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count) >> $log_file 2>&1 &
ただし、空のファイルが残り、画面には出力されません。これら 3 つのことすべてを実行するには、何をする必要がありますか?
私はBusyboxをインストールした組み込みシステムでこれを実行しています。含まれていませんtee
これは重複ではありませんこの質問。
答え1
あなたが示しているものは、私のシステムでは期待通りに動作します。 ではbash
なく を使用していますかsh
? いずれにしても、dash
と をbusybox
で試してみたsh
ところ、そこでも動作しました。 がない場合、唯一の解決策は、コマンドの終了後にtee
を実行することだと思います。cat $logfile
busybox
もう一つの可能性は、へのリンクを作成してtee
、それを実行してみることです。busybox
私の Debian に付属していた はそれをサポートしていますが、あなたの 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
;
2 番目のコマンドの末尾にある をメモします。これは、コード ブロックが機能するために必須です。
使用したくない場合はtee
、これについて考えてみてください
{ time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count; } 2>&1 &> $log_file;cat $log_file