
現在、大量のフロッピー ディスクをバックアップし、後で使用するためにフォーマットするための小さなスクリプトを作成しています。
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
}
インスパイヤされたリーン生産方式の場合: