Verificar el éxito del comando en bash

Verificar el éxito del comando en bash

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 ddpara copiar la imagen del disco y cpcopiar 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 ( ddy cp) tuvieron éxito.

Por ejemplo, si ddno 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:

información relacionada