[bash] bash 스크립트를 한 줄씩 실행하는 방법은 무엇입니까?

bash -x 옵션을 입력하면 모든 행이 표시됩니다. 그러나 스크립트는 정상적으로 실행됩니다.

줄 단위로 어떻게 실행할 수 있습니까? 그것이 올바른 일을하는지 볼 수 있거나 버그를 중단하고 수정합니다. read모든 줄에 동일한 효과가 적용 됩니다.



답변

모든 줄에 읽을 필요가 없습니다. 다음과 같은 트랩을 bash 스크립트에 추가하기 만하면 원하는 효과를 얻을 수 있습니다.

#!/usr/bin/env bash
set -x
trap read debug

< YOUR CODE HERE >

작동하며 bash v4.2.8 및 v3.2.25로 테스트했습니다.


개선 된 버전

스크립트가 파일에서 내용을 읽는 경우 위에 나열된 내용이 작동하지 않습니다. 해결 방법은 다음 예제와 같습니다.

#!/usr/bin/env bash
echo "Press CTRL+C to proceed."
trap "pkill -f 'sleep 1h'" INT
trap "set +x ; sleep 1h ; set -x" DEBUG

< YOUR CODE HERE >

이 경우 스크립트를 중지하려면 다른 셸 에서 스크립트를 종료해야합니다 .


대안 1

스크립트의 다음 명령으로 진행하기 전에 몇 초만 기다리려는 경우 다음 예제가 도움이 될 수 있습니다.

#!/usr/bin/env bash
trap "set +x; sleep 5; set -x" DEBUG

< YOUR CODE HERE >

출력을 더 읽기 쉽게 만들기 위해 트랩 명령 내에 set + x 및 set -x를 추가하고 있습니다.


답변

아마도 BASH 디버거 가 당신을위한 것입니다.


답변

bash 스크립트가 실제로 하나씩 실행 LN하려는 일련의 명령 인 경우 다음과 같이 수행 할 수 있습니다. 실행하려는 줄 번호에 해당 하는 변수를 증가시킬 때 각 명령을 하나씩 실행합니다. . 이렇게하면 마지막 명령을 다시 매우 쉽게 실행할 수 있으며 변수를 증가시켜 다음 명령으로 이동할 수 있습니다.

명령이 “it.sh”파일에 있다고 가정하고 다음을 하나씩 실행하십시오.

$ cat it.sh
echo "hi there"
date
ls -la /etc/passwd

$ $(LN=1 && cat it.sh | head -n$LN | tail -n1)
"hi there"

$ $(LN=2 && cat it.sh | head -n$LN | tail -n1)
Wed Feb 28 10:58:52 AST 2018

$ $(LN=3 && cat it.sh | head -n$LN | tail -n1)
-rw-r--r-- 1 root wheel 6774 Oct 2 21:29 /etc/passwd


답변

bash-stepping-xtrace 살펴보기 .

xtrace를 스테핑 할 수 있습니다.


답변

xargs : 라인 필터링 가능

cat .bashrc | xargs -0 -l -d \\n bash
  • -0 원시 입력으로 처리 (이스케이프 없음)
  • -l 각 줄 구분 (공연에는 기본값이 아님)
  • -d \\ n 줄 구분 기호


답변