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

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

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

代替手段があるか、/dev/nullにリダイレクトしています。唯一の方法は?

コメント

  • I '最後の文で失われました"スクリプトは特権を要求しないでください"。それは'とは何の関係もないようです。 /dev/nullへのリダイレクト-ddにはivへの書き込みアクセスが必要なため、'を非難しますid = “e53e6293e6″>

(私は推測します)。' dd 'の出力;出力を/dev/nullにリダイレクトする場合'ルートは必要ありません

  • I 'はばかです。/dev/r$temp1/を使用しているため、操作が許可されていませんでした。I
  • 本当に申し訳ありません。 ' 'が自分のものではなく、'気づかなかったスクリプトを編集しています。本当に申し訳ありません。

  • 問題は、通常のユーザーが/ dev / r $ temp1またはdev / nullに書き込めないことです
  • Don '心配しないでください。紛らわしい部分を削除するために少し編集しました
  • 'がdd 'を使用していない場合高度な機能については、代わりにcatheadまたはtailを使用してください。
  • 回答

    dd(1)のマニュアルページから:

     status=noxfer suppress transfer statistics 

    したがって:

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

    これでも

    0+1 records in 0+1 records out 

    ddが終了したときのゴミなので、データシンクにリダイレクトすることが唯一の選択肢です。

    コメント

    • 私は'恐れていました。
    • status = noxferは、通常は転送を示すSIGUSR1信号に関連している可能性があると思います。統計。ただし、'私が言っていることが正しいかどうかをテストするつもりはありません。

    回答

    status=noneを追加:

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

    dd(coreutils)8.21ドキュメント:

     "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.  

    コメント

    • @ roaima-好奇心が強い、マニュアルページから引用を編集する理由
    • @don_crisstiマニュアルページから引用を抽出する際のコンテキスト(の欠如)は、わずかに異なる形式の単語が必要であることを意味していると感じました。 のマニュアルページにあるので'問題ありません。ここでは奇妙に見えました。
    • @ roaima-大丈夫-好奇心は満足しています:)-ただし、info pageにリンクしていることに注意してください。ここでの最初の回答は、 man page からの正確な引用でした。 manページがあいまいな場合は、infoページから直接コピーして貼り付けますが、実際には、あなた次第です…ああ、ところで、平日での並べ替えに関連する私の回答に対する他のコメントに感謝します。
    • ' dd(coreutils)8.13では利用できないようです。 dd: invalid status flag: `none' Try `dd --help' for more information.
    • IMOこれは受け入れられた回答である必要があります

    回答

    今後の参照用:

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

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

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

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

    回答

    このようなものは、最近のバージョンのBASHおよびZSHでも機能するはずです:

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

    P.S。これは私が実行した単なる例です…

    回答

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

    cmd >/dev/null 2>&1

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

    UNIXでは、STDIN = 0、STDOUT = 1、STDERR = 2


    コメント

    • 実際には、stderrにはファイル記述子 2 があります。 (" STDERR = 3 "は単なるタイプミスだと思います。)
    • すべての出力を抑制することは望ましくありません。 。エラーが発生した場合は、エラーメッセージを表示したいと思います。
    • cmd 2>logfile.txtの方が適しているようです

    回答

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

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

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

    コメント

    • いいえ。それは'まさに私がやりたくないことです'。 ' ddに出力を表示させたくないので、'スクリプトをrootとして実行したくない。スクリプトをスーパーユーザーとして実行したい場合は、チェックが修正されます。
    • @dierreでは、そもそもなぜsudoが必要だったのでしょうか。通常のユーザーは、/dev/nullに問題なくリダイレクトできるはずです。
    • ' Ubuntuとそれを使用しています'操作が許可されていません…うーん…
    • 'ごめんなさい。 ' / dev /の下に何かを作成していることに気づきませんでした。スクリプトは私のものではなく、編集していました。 '本当に申し訳ありません。

    回答

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

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

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です