web-dev-qa-db-ja.com

dd出力を抑制するにはどうすればよいですか?

ddを使用してファイルを作成するbashスクリプトがあります。問題は、ddが大量の出力をスローし、スクリプトの出力を混乱させることです。周りを検索して解決策を見つけました:

dd if=boot1h of="/dev/r$temp1" >& /dev/null

代替手段はありますか、それとも/dev/nullにリダイレクトする唯一の方法ですか?

36
dierre

dd(1)のmanページから:

   status=noxfer
          suppress transfer statistics

したがって:

dd if=boot1h of="/dev/r$temp1" status=noxfer

これはまだ出力します

0+1 records in
0+1 records out

ddの終了時にガベージが発生するため、データシンクへのリダイレクトが唯一の選択肢です。

16
amphetamachine

追加 status=none

dd if=boot1h of="/dev/r$temp1" status=none

dd(coreutils)8.21 docs から:

'status=LEVEL'
     Transfer information is normally output to stderr upon receipt of
     the 'INFO' signal or when 'dd' exits.  Specifying LEVEL will adjust
     the amount of information printed, with the last LEVEL specified
     taking precedence.

     'none'
          Do not print any informational or warning messages to stderr.
          Error messages are output as normal.

     'noxfer'
          Do not print the final transfer rate and volume statistics
          that normally make up the last status line.

     'progress'
          Print the transfer rate and volume statistics on stderr, when
          processing each input block.  Statistics are output on a
          single line at most once every second, but updates can be
          delayed when waiting on I/O.
58
orgoj

今後の参考のために:

Dd出力を抑制するには、次のようにstderrを/ dev/nullに完全にリダイレクトします。

dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null

これは、たとえば、bashのtimeコマンドを使用してプロセスの時間を計り、結果を変数に割り当てたい場合、ddが生成する出力を取得せずにうまく機能します。

参照: http://www.unix.com/Shell-programming-and-scripting/131624-how-suppress-dd-output.html

6
CSCH

このようなものは、BASHとZSHの最新バージョンでも機能するはずです。

dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null

追伸これは私が実行した例にすぎません...

2
slashdot

Unixアプリケーションまたはコマンドでは、すべての出力を抑制できます。

cmd >/dev/null 2>&1

最初のビットは、標準出力(ユニット番号1)を/ dev/nullにリダイレクトします。ただし、エラー出力(ユニット番号2)を番号1と同じ場所にリダイレクトするための2番目の部分も必要です。

UNIXでは、STDIN = 0、STDOUT = 1、およびSTDERR = 2


2
Michael Dillon

私があなたが何をしようとしているのかを正しく理解している場合、そのSudoコマンドをスクリプトに入れ、スクリプトが実行時にパスワードの入力を要求することを期待していますか?その場合、あなたは物事を複雑な方法でやっているだけです。

よりクリーンな解決策は、スクリプトを通常の方法で(つまり、Sudoなしで)作成し、 スーパーユーザーとして実行 することです。この背後にある理由は、スクリプトにスーパーユーザーアクセスが必要な場合は、アクセスを許可するだけです(なぜ特定のコマンドまで待つのですか?)。スクリプトで、rootとして実行されているかどうかを確認するには、次のようにします。

if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root" 1>&2
    exit 1
fi
0
phunehehe

出力を通常のファイルにリダイレクトできます。

 dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
0
jet