~/.profile
나는 Bash를 사용할 때 디버그 모드를 눈에 띄게 사용하는 것을 좋아하므로 새 머신을 얻을 때마다 코드 끝에 추가합니다 set -x
.
eu
나는 그것을 추가하는 것을 고려 중이므로 set -eux
"모범 사례"로 만드십시오.
내가 이해한다면BR 매뉴얼바르게
e
결국 0이 아닌(보통 잘못된) 출력을 반환하는 코드를 실행하지 않는 이점이 있습니다.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이 아닌 상태를 반환하려면 명령을 실행해야 합니다.