Проверьте успешность команды в bash

Проверьте успешность команды в bash

В настоящее время я пишу небольшой скрипт для резервного копирования больших объемов дискет и их форматирования для дальнейшего использования.

Я использую его 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
}

Вдохновленныйв бережливом производстве:

Связанный контент