스크립트의 인라인 디버깅(xtrace)

스크립트의 인라인 디버깅(xtrace)

스크립트의 명령줄별로 디버깅(xtrace)을 강제로 활성화하거나 비활성화하는 방법이 있습니까?

Windows 셸("ms-dos")에서는 "@"를 명령줄 접두사로 사용할 수 있으며, 에코(디버깅이라고 가정)가 활성화된 경우(에코가 켜져 있는 경우) 줄 표시를 비활성화할 수 있습니다.

(set -x)에 대한 xtrace를 고려하십시오. 그러나 특정 행에 대한 영향을 무시하고 "@"을 앞에 붙일 수 있습니다. 좋다:

set -x
@echo Listing...
ls
set +x

출력 예:

Listing...
+ ls
file1
file2

쉘 스크립트에 비슷한 것이 있습니까?

답변1

나는 그러한 연산자가 있는 쉘을 모릅니다. 그러나 대부분의 쉘(ksh는 예외)의 경우 다음을 xtrace사용하여 자동으로 전환할 수 있습니다.

{
  case $- in
    (*x*) set +x;;
    (*) set -x
  esac
} 2> /dev/null

따라서 별칭으로 만들 수 있습니다.

alias 'xx={
  case $- in
    (*x*) set +x;;
    (*) set -x
  esac
} 2> /dev/null'

다음과 같이 사용됩니다.

set -x
echo traced
xx; echo not traced; xx
echo traced
set +x

shopt -s expand_aliasesBash를 사용하면 비대화형 셸(예: 스크립트)에서 별칭을 확장 해야 합니다 .

관련 정보