나는 현재 많은 수의 플로피 디스크를 백업하고 나중에 사용하기 위해 포맷하기 위한 작은 스크립트를 작성 중입니다.
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
}
고무하다린 제조에서는: