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.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
}

고무하다린 제조에서는:

관련 정보