0이 아닌 종료 코드로 bash 스크립트가 종료되지 않도록 방지

0이 아닌 종료 코드로 bash 스크립트가 종료되지 않도록 방지

Bash 스크립트가 있는데 명령의 종료 코드가 0보다 큰 경우 스크립트가 종료되지 않도록 해야 합니다. 이것의 목적은 사용자 정의 오류 메시지를 에코하는 것입니다. 종료 코드가 0보다 크고 echo 문이 실행되지 않기 때문에 현재 코드가 실패합니다. 0이 아닌 상태를 자동으로 무시하고 사용자 정의 오류 메시지를 인쇄하는 방법이 있습니까?

암호:

#/bin/bash

# Faulty command
lllll
echo $?
   
if [ "$?" -gt 0 ]; then
    echo "Please enter a valid command."
fi

산출:

./test.sh: line 4: lllll: command not found
127

답변1

당신은 질문을 오해했습니다. set -e스크립트에 추가하여 Bash에 명시적으로 알리면 오류가 발생한 경우에만 종료됩니다 . 여기서 일어나는 일은 이 변수가 $?마지막 명령 실행의 종료 코드를 보유하고 있다는 것입니다. 귀하의 경우 마지막 명령은 그렇습니다. back 에 echo $?있기 때문에 Since 의 값은 0 이 될 것입니다 . 이 시도:if [ "$?" -gt 0 ]echo $?$?echo

#!/bin/bash

# Faulty command
lllll
   
if [ "$?" -gt 0 ]; then
    echo "Please enter a valid command."
fi

위 스크립트를 실행하면 다음이 생성됩니다.

$ foo.sh
/home/terdon/scripts/foo.sh: line 4: lllll: command not found
Please enter a valid command.

더 깔끔한 접근 방식은 오류 메시지를 숨기는 것입니다.

#!/bin/bash

# Faulty command
lllll 2> /dev/null
   
if [ "$?" -gt 0 ]; then
    echo "Please enter a valid command."
fi

다음을 생성합니다.

$ foo.sh
Please enter a valid command.

물론 if다음과 같은 것도 필요하지 않습니다.

#!/bin/bash

# Faulty command
lllll 2> /dev/null || echo "Please enter a valid command."

관련 정보