Verifique o sucesso do comando no bash

Verifique o sucesso do comando no bash

Atualmente estou escrevendo um pequeno script para fazer backup de grandes volumes de disquetes e formatá-los posteriormente para uso posterior.

Eu uso ddpara copiar a imagem do disco e cpcopiar 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 ( dde cp) forem bem-sucedidos.

Por exemplo, se ddnã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:

informação relacionada