잘못된 건너뛰기 값이 지정된 경우 dd가 실패하도록 만드는 방법은 무엇입니까?

잘못된 건너뛰기 값이 지정된 경우 dd가 실패하도록 만드는 방법은 무엇입니까?

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". 실제로, ddfalse를 반환하는 대신 쉘은 이를 수행합니다. 이는 dd호출되지 않았음을 의미하지만 wc물론 호출됩니다. 서브셸에서 실행하는 것도 가치가 있을 수 있습니다. 그렇지 않으면 비대화형 셸이 종료될 수 있기 때문입니다.

이것은 또한 기본적인 bs=1예입니다. 대부분의 경우 블록 크기를 고려하거나 GNU를 사용해야 할 수도 있습니다.바이트 건너뛰기배너.

관련 정보