
나는 현재 대량의 플로피 디스크를 백업하고 나중에 사용하기 위해 포맷하는 작은 스크립트를 작성 중입니다.
dd
디스크의 이미지를 복사하고 cp
디스크의 모든 파일을 복사하는 데 사용합니다 .
이를 위해 사용하는 명령은 다음과 같습니다.
# Copying disk image
dd if="/dev/fd0" of="/path/to/backup/folder" &>/dev/null && sync
# Copying disk files
cp -R "/mnt/floppy/." "/path/to/backup/folder/" &>/dev/null
이 과정이 끝나면 스크립트는 플로피 디스크를 포맷해야 합니다. 내 문제는 두 백업 명령( dd
및 cp
)이 모두 성공한 경우에만 스크립트가 플로피 디스크를 포맷하도록 하려는 것입니다 .
예를 들어, dd
불량 블록으로 인해 플로피 디스크 1.44MB를 모두 복사할 수 없다면 플로피 디스크를 포맷하지 마십시오.
두 명령이 모두 성공했는지 어떻게 테스트할 수 있나요? (디스크의 이미지와 파일을 항상 백업하지는 않으므로 별도로 테스트해야 합니다.)
답변1
bash를 사용하고 있으므로 다음을 추가하십시오.
set -e
스크립트 시작 부분으로 이동하면 명령이 실패할 때마다 실패합니다.
답변2
나는 할 것이다:
ok=true
if dd ...; then
sync
else
ok=false
fi
cp ... || ok=false
if "$ok"; then
mformat...
fi
답변3
다음을 사용해 보세요:
dd <command>
DD_EXIT_STATUS=$?
cp <command>
CP_EXIT_STATUS=$?
if [[ DD_EXIT_STATUS -eq 0 && CP_EXIT_STATUS -eq 0 ]]; then
format floppy disk
else
... other stuff ...
fi
답변4
을 위한오류 교정당신의 명령:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
탁월한린 제조 방식: