쉘 프롬프트에 마지막 명령 반환 추가

쉘 명령을 실행할 때마다 정수 값을 반환합니다. 이 값이 0 이면 마지막 명령이 성공한 것입니다. 다른 숫자는 오류 코드입니다. ? 변수의 값을 출력하여 마지막 명령의 반환을 볼 수 있습니다.

이것을 테스트하려면:
  • 명령 입력ls
  • 명령으로 반환 확인 echo $?
  • 임의의 문자를 입력하고 Enter 키를 누릅니다
  • .
  • 반품 확인 echo $?

  • 임의의 명령을 입력할 때 두 번째로 오류가 발생해야 합니다.

    chinmay@CC-T480:~/Desktop$ ls
    file
    chinmay@CC-T480:~/Desktop$ echo $?
    0    <-- Success
    chinmay@CC-T480:~/Desktop$ a
    a: command not found
    chinmay@CC-T480:~/Desktop$ echo $?
    127  <-- Error code
    


    프롬프트에서 이 값$?을 사용하여 마지막 명령이 통과했는지 실패했는지 확인합니다.

    또한 환경 변수PROMPT_COMMAND에 대해서도 알아야 합니다. Bash는 PROMPT_COMMAND 라는 환경 변수를 제공합니다. 이 변수의 내용은 Bash가 프롬프트를 표시하기 직전에 일반 Bash 명령으로 실행됩니다.

    bash 프롬프트에는 마지막 명령의 상태가 포함되어야 하므로 PROMPT_COMMAND 내부에 설정해야 합니다.

    먼저 프롬프트를 반환 코드로 업데이트하는 간단한 셸 함수를 작성합니다.

    exit_code() {
        # Save the exit status of last command. This
        # needs to be done first otherwise exit status of
        # other commands will be stored in this variable.
        EXIT="$?"
    
        # PS1 needs to be reset or else it will
        # be appended every time to previous one.
        PS1=""
    
        # This will be final prompt, whatever set earlier will be
        # overwritten by this.
        export PS1="$EXIT \w $ "
    }
    


    그런 다음 이 함수를 PROMPT_COMMAND
    # exit_code Should be first command in `PROMPT_COMMAND' to be executed or # else return status will always be 0/true as it will hold return status of
    # previous command.
    
    # First we check if prompt command is empty or not.
    # If empty, just add `exit_code' to it. If non empty,
    # make it `exit_code:$PROMPT_COMMAND'
    [ -n "$PROMPT_COMMAND" ] && PROMPT_COMMAND="exit_code;$PROMPT_COMMAND" ||
        PROMPT_COMMAND="exit_code"
    


    위의 2개의 스니펫을 .bashrc 에 추가한 후 다음과 같은 결과를 얻습니다.

    chinmay@CC-T480:~$ exit_code() {
    >     EXIT="$?"
    >     PS1=""
    >     export PS1="$EXIT \w $ "
    > }
    chinmay@CC-T480:~$ PROMPT_COMMAND="exit_code"
    0 ~ $ ls Desktop/
    file
    0 ~ $ ^C
    130 ~ $ a
    a: command not found
    127 ~ $ echo $?
    127
    0 ~ $ echo $?    # return of last echo command
    0
    0 ~ $ 
    


    프롬프트의 첫 번째 숫자는 마지막 명령의 반환 상태입니다. ls 의 경우 예상대로 실행된 0가 표시됩니다. 내가 command a 를 실행했을 때 bash는 command not found라는 오류를 던졌고 그 오류 코드는 127이며 다음 줄에서 볼 수 있습니다. ctrl-c 를 누르면 130 와 같은 오류 코드를 볼 수 있습니다.

    체크아웃 .

    좋은 웹페이지 즐겨찾기