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
}

탁월한린 제조 방식:

관련 정보