在 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

此过程之后,脚本需要格式化软盘。我的问题是,我希望我的脚本仅在两个备份命令(ddcp)都成功时才格式化软盘。

例如,如果dd由于坏块而无法复制软盘的全部1.44MB,则不要格式化软盘。

如何测试这两个命令是否成功(必须单独测试它们,因为我并不总是备份磁盘的映像和文件)?

答案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
}

启发在精益制造中:

相关内容