
Ich schreibe derzeit ein kleines Skript, um große Mengen Disketten zu sichern und sie anschließend für die spätere Verwendung zu formatieren.
Ich verwende es, dd
um das Image der Festplatte und cp
alle Dateien auf der Festplatte zu kopieren.
Hier sind die Befehle, die ich dazu verwende:
# 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
Nach diesem Vorgang muss das Skript die Diskette formatieren. Mein Problem ist, dass mein Skript die Diskette nur formatieren soll, wenn beide Sicherungsbefehle ( dd
und cp
) erfolgreich waren.
Wenn beispielsweise dd
aufgrund fehlerhafter Blöcke nicht alle 1,44 MB der Diskette kopiert werden konnten, formatieren Sie die Diskette nicht.
Wie kann ich testen, ob beide Befehle erfolgreich waren (sie müssen separat getestet werden, da ich nicht immer sowohl das Image als auch die Dateien der Festplatte sichere)?
Antwort1
Da Sie Bash verwenden, fügen Sie einfach hinzu:
set -e
an den Anfang Ihres Skripts und es schlägt fehl, wenn einer der Befehle fehlschlägt.
Antwort2
Ja, würde ich:
ok=true
if dd ...; then
sync
else
ok=false
fi
cp ... || ok=false
if "$ok"; then
mformat...
fi
Antwort3
Versuche es mit:
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
Antwort4
FürFehlervermeidungIhre Befehle:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
Inspiriertim Lean Manufacturing: