dd
を使用してファイルを作成するbashスクリプトがあります。問題は、ddが大量の出力をスローし、スクリプトの出力を台無しにすることです。周りを検索すると、解決策が見つかりました:
dd if=boot1h of="/dev/r$temp1" >& /dev/null
代替手段があるか、/dev/null
にリダイレクトしています。唯一の方法は?
コメント
(私は推測します)。' dd
'の出力;出力を/dev/null
にリダイレクトする場合'ルートは必要ありません
本当に申し訳ありません。 ' 'が自分のものではなく、'気づかなかったスクリプトを編集しています。本当に申し訳ありません。
cat
、head
または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
/dev/null
へのリダイレクト-dd
にはivへの書き込みアクセスが必要なため、'を非難しますid = “e53e6293e6″>