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를 사용해야 할 수도 있습니다.바이트 건너뛰기배너.