저는 20줄 정도의 스크립트를 작성하고 있는데, 한 줄씩 복사해서 붙여넣고 실행하면서 계속해서 테스트하고 있는 자신을 발견하게 되었습니다.
Enter각 줄을 복사하여 붙여넣고 실행을 누르고 싶지 않습니다.복사 및 붙여 넣기전체 스크립트를 한 번에 실행할 필요는 없습니다(블록 또는여기 문서), 하지만 패션과 같은 쿼리는 다음과 같습니다.
get의 첫 번째 줄은 주기적으로(무조건적으로) 실행되며, (출력을 고려할 충분한 시간이 지난 후) 다음 줄을 계속 실행할지 묻는 메시지가 표시됩니다.
계속하기로 선택하면 그대로 유지됩니다. 그렇지 않으면 작업이 중단됩니다.
(물론 지금까지의 결과가 롤백되지는 않겠지만, 적어도 더 이상의 의심스러운 결과는 계속 생성되지 않을 것입니다.)
이 패턴은 스크립트가 끝날 때까지 한 줄씩 반복되어야 합니다.
이런 방식으로 작업하는 데 도움이 되는 유틸리티가 있나요?
답변1
당신이 사용할 수있는배시 디버거스크립트를 디버그하세요.
더 쉬운 옵션은 DEBUG
트랩을 사용하는 것입니다.
#!/bin/bash
function prompt {
if [[ -n "$BASH_COMMAND" ]]; then
echo About to run \'$BASH_COMMAND\'
read -p 'Continue [Y/n]?' CONT
if [[ "$CONT" = "n" || "$CONT" = "N" ]]; then
echo Exiting prematurely
exit 1
fi
fi
}
trap prompt DEBUG
echo Hello
ls
sleep 10
prompt
트랩이 설정되면 각 명령 전에 기능이 실행되어 계속하거나 중단할 수 있는 옵션이 제공됩니다. 로 시작하는 줄은 echo Hello
스크립트로 대체됩니다. 또는 더 나은 방법은 trap
함수와 명령을 별도의 스크립틀릿에 저장하고 source
디버그하려는 스크립트 내에 배치할 수 있다는 것입니다.
트랩에는 몇 가지 미묘함이 있습니다 DEBUG
. 함수 내부에서 재설정되지 않는 한 내부 함수를 트리거하지 않습니다. 따라서 함수 자체를 포함하여 디버깅하고 싶지 않은 함수를 건너뛸 수 있지만 다음 사항을 prompt
기억해야 합니다. trap
함수는 내부에서 실행됩니다)하다디버그하고 싶습니다).
추적 동작은 다음을 추가하여 스크립트에서 마음대로 활성화 및 비활성화할 수 있습니다.
trap prompt DEBUG
그리고
trap "" DEBUG
적절한.