
В настоящее время я пишу небольшой скрипт для резервного копирования больших объемов дискет и их форматирования для дальнейшего использования.
Я использую его 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,44 МБ дискеты из-за поврежденных блоков, то не форматируйте дискету.
Как проверить, были ли обе команды выполнены успешно (их необходимо проверять по отдельности, так как я не всегда делаю резервные копии и образа диска, и файлов)?
решение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
}
Вдохновленныйв бережливом производстве: