스크립트를 한 줄씩 자동으로 실행하지만 두 번째 줄부터 시작하는 각 줄 앞에 묻습니다.

스크립트를 한 줄씩 자동으로 실행하지만 두 번째 줄부터 시작하는 각 줄 앞에 묻습니다.

저는 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

적절한.

관련 정보