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 MB すべてをコピーできなかった場合は、フロッピー ディスクをフォーマットしないでください。

両方のコマンドが成功したかどうかをテストするにはどうすればよいでしょうか (ディスクのイメージとファイルの両方を常にバックアップするわけではないので、個別にテストする必要があります)?

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

インスパイヤされたリーン生産方式の場合:

関連情報