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 줄 구분 기호
답변
