전역 디버깅을 위해 Bash 구성 파일에서 -x 대신 -eux를 설정하세요.

전역 디버깅을 위해 Bash 구성 파일에서 -x 대신 -eux를 설정하세요.

~/.profile나는 Bash를 사용할 때 디버그 모드를 눈에 띄게 사용하는 것을 좋아하므로 새 머신을 얻을 때마다 코드 끝에 추가합니다 set -x.

eu나는 그것을 추가하는 것을 고려 중이므로 set -eux"모범 사례"로 만드십시오.

내가 이해한다면BR 매뉴얼바르게

  1. e결국 0이 아닌(보통 잘못된) 출력을 반환하는 코드를 실행하지 않는 이점이 있습니다.
  2. u- 잘 이해가 안 가는데요, 그 남자는 이렇게 말했습니다.

설정되지 않은 변수와 특수 매개변수 "@", "*" 이외의 매개변수는 매개변수 확장 시 오류로 처리됩니다. 오류 메시지가 표준 오류에 기록되고 비대화형 쉘이 종료됩니다.

나에게는 이렇게 들리지만 e설정되지 않은 변수도 오류를 일으키는 것으로 간주하고 0이 아닌 값으로 종료됩니다.

최고의 "일반적인" 디버깅을 찾는 사람의 경우 여기에서 제가 이해한 내용이 정확하고 set -eux평균보다 나은가요?set -x

답변1

이것은 의견의 문제이지만 set -eu대화식으로 사용하는 것은 좋지 않은 생각이라고 생각합니다. 모두가 하는 일은 다음과 같습니다.

  • set -e다음 조건이 발생할 때마다 쉘이 종료됩니다.관로,목록, 또는복합 명령0이 아닌 상태로 종료합니다.
  • set -u쉘이 정의되지 않은 매개변수를 확장하려고 시도할 때마다 쉘이 종료됩니다.

대화형 셸에서 이는 명령에 오류가 있으면 셸이 종료된다는 의미입니다! 예를 들어 명령어 이름에 오타가 있거나, rm파일 이름이 잘못되었거나, echo $blah변수 이름이 잘못되었거나...

set -e쉘 스크립트를 작성할 때 유용합니다 set -u. 특히 set -e복합 오류를 방지할 수 있습니다. 명령이 실패하면 스크립트가 종료되므로 후속 명령이 예상한 컨텍스트에서 실행되지 않는 문제를 방지할 수 있습니다.

설명과 달리 0이 -e아닌 상태를 반환하는 코드를 실행하는 것을 방지할 수는 없습니다. 0이 아닌 상태를 반환하려면 명령을 실행해야 합니다.

관련 정보