
Actualmente estoy escribiendo un pequeño script para realizar copias de seguridad de grandes cantidades de disquetes y luego formatearlos para su uso posterior.
Utilizo dd
para copiar la imagen del disco y cp
copiar todos los archivos del disco.
Estos son los comandos que uso para hacerlo:
# 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
Después de este proceso, el script necesita formatear el disquete. Mi problema es que quiero que mi secuencia de comandos formatee el disquete sólo si ambos comandos de copia de seguridad ( dd
y cp
) tuvieron éxito.
Por ejemplo, si dd
no pudo copiar los 1,44 MB del disquete debido a bloques defectuosos, no formatee el disquete.
¿Cómo puedo probar si ambos comandos tuvieron éxito (deben probarse por separado, ya que no siempre hago copias de seguridad de la imagen y los archivos del disco)?
Respuesta1
Ya que estás usando bash simplemente agrega:
set -e
al principio de su secuencia de comandos y fallará cada vez que falle alguno de los comandos.
Respuesta2
Lo haría:
ok=true
if dd ...; then
sync
else
ok=false
fi
cp ... || ok=false
if "$ok"; then
mformat...
fi
Respuesta3
Prueba con:
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
Respuesta4
Paraprueba de errortus comandos:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
Inspiradoen manufactura esbelta: