bash 스크립트를 테스트 / 디버깅하고 있고 하나 이상의 코드 섹션을 건너 뛰려면 단순히 대부분의 방법과 달리 나중에 쉽게 찾아 제거 할 수있는 매우 간단한 방법이 있습니다. 전술 한 바와).
#!/bin/bash
echo "Run this"
cat >/dev/null <<GOTO_1
echo "Don't run this"
GOTO_1
echo "Also run this"
cat >/dev/null <<GOTO_2
echo "Don't run this either"
GOTO_2
echo "Yet more code I want to run"
스크립트를 다시 정상으로 되돌리려면로 줄을 삭제하십시오 GOTO
.
goto
명령을 별칭으로 추가하여이 솔루션을 구체화 할 수도 있습니다 .
#!/bin/bash
shopt -s expand_aliases
alias goto="cat >/dev/null <<"
goto GOTO_1
echo "Don't run this"
GOTO_1
echo "Run this"
goto GOTO_2
echo "Don't run this either"
GOTO_2
echo "All done"
별칭은 일반적으로 bash 스크립트에서 작동하지 않으므로 shopt
이를 수정 하려면 명령이 필요합니다 .
의 기능을 활성화 / 비활성화 goto
하려면 조금 더 필요합니다.
#!/bin/bash
shopt -s expand_aliases
if [ -n "$DEBUG" ] ; then
alias goto="cat >/dev/null <<"
else
alias goto=":"
fi
goto '#GOTO_1'
echo "Don't run this"
#GOTO1
echo "Run this"
goto '#GOTO_2'
echo "Don't run this either"
#GOTO_2
echo "All done"
그런 다음 export DEBUG=TRUE
스크립트를 실행하기 전에 수행 할 수 있습니다 .
레이블은 주석이므로 ' 'no-op goto
로 설정 goto
하여 '를 비활성화하면 구문 오류가 발생하지 :
않습니다.goto
명령문 합니다.
어떤 종류의 goto
솔루션을 사용할 때마다 과거에 점프하는 코드가 나중에 의존하는 변수를 설정하지 않도록주의해야합니다. 이러한 정의를 스크립트의 맨 위 또는 바로 위로 이동해야 할 수도 있습니다 당신의 goto
진술.
goto
bash 에는 없습니다 (적어도command not found
나를 위해 말합니다 ). 왜? 더 좋은 방법이있을 가능성이 있습니다.