이전에 Bash에서 성공(또는 실패)한 경우 명령을 실행합니다.

이전에 Bash에서 성공(또는 실패)한 경우 명령을 실행합니다.

설명서를 읽고 따라하세요.이 답변, 간단한 예를 들어 테스트하고 싶습니다.

test_1.sh

#!/usr/bin/bash

let x=1/0
echo $x

test_2.sh

#!/usr/bin/bash

printf "\nThis is 2\n"

그러나 두 제어 흐름 구현 모두 실패합니다. test_1을 실행하고, 실패하면 test_2를 실행합니다.

# Just errors on line 1 of course
./test_1.sh 
if [ $? -ne 0 ]; then
    ./test_2.sh
fi

또한 실패합니다:

./test_1.sh || ./test_2.sh

여러 스크립트 간의 흐름을 제어하는 ​​방법에 대한 팁이 있나요?

답변1

귀하의 의견을 토대로:

test_1.sh성공(반환 코드 0) 또는 실패(0이 아닌 모든 것)를 초래할 수 있는 이와 같은 프로시저가 있습니다 . 나는 이와 같은 것이 test_2.sh전자의 경우에만 실행되기를 원합니다.

질문의 스니펫과 반대되는 내용을 원합니다.

./test_1.sh
if [ $? -ne 0 ]; then
    ./test_2.sh
fi

test_2.sh실패하라는 지시가 있으면 실행합니다 test_1.sh.

./test_1.sh || ./test_2.sh 

test_2.sh성공을 나타내는 경우 실행하려면 test_1.sh다음 중 하나가 작동합니다.

./test_1.sh
if [ $? -eq 0 ]; then
    ./test_2.sh
fi
if ./test_1.sh; then
    ./test_2.sh
fi
./test_1.sh && ./test_2.sh

바라보다쉘의 제어 및 리디렉션 연산자는 무엇입니까?더 알아보기.

test_1.sh0으로 나누더라도 현재는 항상 성공을 나타냅니다. 바라보다0으로 나누기를 무시하거나 캡처합니다.더 알아보기.

관련 정보