IT Share you

bash에서 die "error msg"와 동등한 것이 있습니까?

shareyou 2020. 11. 21. 08:44
반응형

bash에서 die "error msg"와 동등한 것이 있습니까?


Perl에서는 die "some msg". bash에 동등한 단일 명령이 있습니까? 지금은 명령을 사용하여이 작업을 수행하고 있습니다.echo "some msg" && exit 1


당신은 충분히 쉽게 자신을 굴릴 수 있습니다.

die() { echo "$*" 1>&2 ; exit 1; }
...
die "Kaboom"

여기에 제가 사용하고있는 것이 있습니다. 도서관에 넣기에는 너무 작아서 수백 번 타자를 쳤 나봐요 ...

warn () {
    echo "$0:" "$@" >&2
}
die () {
    rc=$1
    shift
    warn "$@"
    exit $rc
}

용법: die 127 "Syntax error"


이것은 perl의 "die"에 매우 가까운 함수입니다 (하지만 함수 이름이 있음) :

function die
{
    local message=$1
    [ -z "$message" ] && message="Died"
    echo "$message at ${BASH_SOURCE[1]}:${FUNCNAME[1]} line ${BASH_LINENO[0]}." >&2
    exit 1
}

그리고 내장 함수가 실패하면 죽는 bash 방법 (함수 이름 포함)

function die
{
    local message=$1
    [ -z "$message" ] && message="Died"
    echo "${BASH_SOURCE[1]}: line ${BASH_LINENO[0]}: ${FUNCNAME[1]}: $message." >&2
    exit 1
}

따라서 Bash는 필요한 모든 정보를 여러 환경 변수에 보관합니다.

  • LINENO-현재 실행 된 줄 번호
  • FUNCNAME-함수 호출 스택, 첫 번째 요소 (인덱스 0)는 현재 함수, 두 번째 (인덱스 1)는 현재 함수를 호출 한 함수입니다.
  • BASH_LINENO-해당 FUNCNAME이 호출 된 줄 번호의 호출 스택
  • BASH_SOURCE-해당 FUNCNAME이 저장된 소스 파일의 배열

네, 그렇게하는 방법입니다.

에코가 성공했는지 여부를 종료하고 싶기 때문에 && 대신 세미콜론이나 개행 문자를 사용할 수 있습니다 (무엇이 실패하게 만드는지는 확실하지 않지만).

셸에서 프로그래밍한다는 것은 한 가지를 잘 수행하는 작은 명령 (일부 내장 명령, 일부 작은 프로그램)을 많이 사용하고 파일 리디렉션, 종료 코드 논리 및 기타 접착제와 연결하는 것을 의미합니다.

모든 것이 함수 나 메서드를 사용하여 수행되는 언어에 익숙하다면 이상하게 보일 수 있지만 익숙해집니다.


# echo pass params and print them to a log file
wlog(){
    # check terminal if exists echo 
    test -t 1 && echo "`date +%Y.%m.%d-%H:%M:%S` [$$] $*"
    # check LogFile and 
    test -z $LogFile || {
      echo "`date +%Y.%m.%d-%H:%M:%S` [$$] $*" >> $LogFile
    } #eof test
 } 
# eof function wlog 


# exit with passed status and message
Exit(){
    ExitStatus=0
    case $1 in
      [0-9]) ExitStatus="$1"; shift 1;;
  esac
    Msg="$*"
    test "$ExitStatus" = "0" || Msg=" ERROR: $Msg : $@"
    wlog " $Msg"
    exit $ExitStatus
}
#eof function Exit

참고 URL : https://stackoverflow.com/questions/7868818/in-bash-is-there-an-equivalent-of-die-error-msg

반응형