스크립트의 명령줄별로 디버깅(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_aliases
Bash를 사용하면 비대화형 셸(예: 스크립트)에서 별칭을 확장 해야 합니다 .