답변:
set -x
실행 된 모든 명령이 터미널에 인쇄되는 쉘 모드를 활성화합니다. 귀하의 경우 디버깅에 명확하게 사용됩니다. 이는 일반적인 사용 사례입니다 set -x
: 실행될 때마다 모든 명령을 인쇄하면 스크립트가 예상대로 작동하지 않는 경우 제어 흐름을 시각화하는 데 도움이 될 수 있습니다.
set +x
비활성화합니다.
set +x
비활성화합니다.
set -e
스크립트 상단에 오류가 발생할 때마다 (명시 적으로 처리되지 않은) 오류와 함께 스크립트가 종료됩니다. 나는 Visual Basic의 악명 높은 것처럼 willy-nilly를 계속 유지하는 것이 기본값보다 엄청나게 선호한다는 것을 알았습니다 On Error Resume Next
.
set -e
가지고 있습니다. (주어진 라인의 동작은 콜 스택의 내용에 달려 있기 때문에-함수가 "체크 된"컨텍스트에서 호출되면 비활성화됩니다. 그 호출과 모든 것을 호출합니다). BashFAQ # 105 의 연습을 참조하십시오 . set -e
set -x
명령, 대소 문자 명령, 선택 명령에 대한 간단한 명령, 명령 및 인수 또는 연관된 단어 목록이 확장 된 후 실행되기 전에 추적됩니다. PS4 변수의 값이 확장되고 결과 값이 명령 및 확장 된 인수 앞에 인쇄됩니다.
[ 출처 ]
set -x
echo `expr 10 + 20 `
+ expr 10 + 20
+ echo 30
30
set +x
echo `expr 10 + 20 `
30
위의 예는의 사용법을 보여줍니다 set -x
. 사용하면 위의 산술 표현이 확장되었습니다. 단일 라인이 어떻게 단계별로 평가되는지 볼 수 있습니다.
expr
가 평가되었습니다.echo
가 평가되었습니다.세트에 대한 자세한 내용을 보려면 → 이 링크를 방문 하십시오
쉘 스크립트와 관련하여
[ "$DEBUG" == 'true' ] && set -x
실행 모드가로 선택된 경우 스크립트가 추가 정보 줄을 인쇄했을 수 있습니다 DEBUG
. 일반적으로 사람들은 스크립트가 다음과 같은 선택적 인수로 호출 될 때 디버그 모드를 활성화하는 데 사용되었습니다.-d
-u : 기본적으로 비활성화되어 있습니다. 활성화되면 구성되지 않은 변수를 사용할 때 오류 메시지가 표시됩니다.
-v : 기본적으로 비활성화되어 있습니다. 활성화 후에는 정보가 출력되기 전에 정보의 원래 내용이 (변수 해상도없이) 표시됩니다.
-x : 기본적으로 비활성화되어 있습니다. 활성화되면 명령 실행 전에 명령 내용이 표시됩니다 (변수 분석 후 ++ 기호가 있음).
다음 차이점을 비교하십시오.
/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root
/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root
/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET
help -m set | less