
Atualmente estou escrevendo um pequeno script para fazer backup de grandes volumes de disquetes e formatá-los posteriormente para uso posterior.
Eu uso dd
para copiar a imagem do disco e cp
copiar todos os arquivos do disco.
Aqui estão os comandos que uso para fazer isso:
# 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
Após esse processo, o script precisa formatar o disquete. Meu problema é que quero que meu script formate o disquete somente se ambos os comandos de backup ( dd
e cp
) forem bem-sucedidos.
Por exemplo, se dd
não foi possível copiar todos os 1,44 MB do disquete devido a blocos defeituosos, não formate o disquete.
Como posso testar se ambos os comandos foram bem-sucedidos (eles devem ser testados separadamente, pois nem sempre faço backup da imagem e dos arquivos do disco)?
Responder1
Como você está usando o bash, basta adicionar:
set -e
ao início do seu script e ele falhará sempre que qualquer um dos comandos falhar.
Responder2
Eu faria:
ok=true
if dd ...; then
sync
else
ok=false
fi
cp ... || ok=false
if "$ok"; then
mformat...
fi
Responder3
Experimente com:
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
Responder4
Paraà prova de errosseus comandos:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
Inspiradona manufatura enxuta: