dd
無効な値で呼び出すとエラーメッセージが表示され、何もしませんが、次skip
の値は返されません。0
$ cd /tmp
$ mkdir xy
$ cd xy
$ truncate -s 2M test.img
$ dd if=test.img of=test-2.img skip=3M
dd: 'test.img': cannot skip to specified offset
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0,000141862 s, 0,0 kB/s
$ echo $?
0
この動作は、スクリプトで使用すると面倒で、dd
戻りコードに依存するよく確立された方法とは異なるプロセス通信や出力の解析を避けたいと思います。dd
正しいものを作る方法?
答え1
0 に分けることができます。
G=$(($((M=$((K=1024))*$K))*$K))
IF=./source_file SKIP=$((3*$M))
dd "if=$IF" "skip=$(($SKIP/($SKIP<$(wc -c <"$IF"))))"
計算結果は"$SKIP/1"
またはです"$SKIP/0"
。実際、dd
falseを返すのではなく、シェルはこれを行います。これはdd
呼び出されなかったことを意味しますが、wc
もちろん呼び出されます。サブシェルで実行することも価値があるかもしれません。そうしないと、非対話型シェルが終了する可能性があるためです。
これも基本的なbs=1
例です。ほとんどの場合、ブロックサイズを考慮するか、GNUを使用する必要があります。バイトをスキップバナー。