Programing

bash 스크립트를 실행할 때 줄 번호를 표시하는 방법

lottogame 2020. 11. 4. 07:36
반응형

bash 스크립트를 실행할 때 줄 번호를 표시하는 방법


나는 명령을 많이 가지고 테스트 스크립트가 출력을 많이 생성, 내가 사용 set -x하거나 set -vset -e오류가 발생하면 스크립트가 중지 것, 그래서. 그러나 문제를 찾기 위해 실행이 중단 된 줄을 찾는 것은 여전히 ​​다소 어렵습니다. 각 라인이 실행되기 전에 스크립트의 라인 번호를 출력 할 수있는 방법이 있습니까? 또는에 의해 생성 된 명령 전시 전에 줄 번호를 출력하십시오 set -x. 또는 스크립트 줄 위치 문제를 처리 할 수있는 모든 방법이 큰 도움이 될 것입니다. 감사.


이미를 사용하고 있다고 언급했습니다 -x. 변수 PS4-x옵션이 설정되고 기본값이 :공백 뒤 따르는 경우 명령 줄이 에코되기 전에 인쇄되는 프롬프트임을 나타냅니다 .

(현재 실행중인 스크립트 또는 셸 함수의 줄 번호) PS4를 내보내도록 변경할 수 있습니다 LINENO.

예를 들어 스크립트가 다음과 같은 경우

$ cat script
foo=10
echo ${foo}
echo $((2 + 2))

따라서 실행하면 줄 번호가 인쇄됩니다.

$ PS4='Line ${LINENO}: ' bash -x script
Line 1: foo=10
Line 2: echo 10
10
Line 3: echo 4
4

http://wiki.bash-hackers.org/scripting/debuggingtipsPS4추적에 필요한 모든 것을 출력 하는 궁극기 제공합니다 .

export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'

Bash $LINENO에서 스크립트가 현재 실행중인 줄 번호를 포함합니다.

함수가 호출 된 줄 번호를 알아야하는 경우을 시도하십시오 $BASH_LINENO. 이 변수는 배열입니다.

예를 들면 :

#!/bin/bash       

function log() {
    echo "LINENO: ${LINENO}"
    echo "BASH_LINENO: ${BASH_LINENO[*]}"
}

function foo() {
    log "$@"
}

foo "$@"

Bash 변수에 대한 자세한 내용은 여기참조 하십시오 .


간단하지만 강력한 솔루션 : echo문제를 일으키는 것으로 생각되는 코드 주위 echo에 배치하고 메시지가 더 이상 화면에 나타나지 않을 때까지 한 줄씩 이동합니다 . 이전 오류로 인해 스크립트가 중지 되었기 때문입니다.

더욱 강력한 솔루션 : bashdbbash 디버거를 설치 하고 스크립트를 한 줄씩 디버그합니다.


LINENO가없는 쉘에 대한 해결 방법

상당히 정교한 스크립트에서는 모든 줄 번호를보고 싶지 않습니다. 오히려 출력을 제어하고 싶습니다.

함수 정의

echo_line_no () {
    grep -n "$1" $0 |  sed "s/echo_line_no//" 
    # grep the line(s) containing input $1 with line numbers
    # replace the function name with nothing 
} # echo_line_no

다음과 같은 따옴표와 함께 사용하십시오.

echo_line_no "this is a simple comment with a line number"

출력은

16   "this is a simple comment with a line number"

소스 파일에서이 행의 수가 16 인 경우.

This basically answers the question How to show line number when executing bash script for users of ash or other shells without LINENO.

Anything more to add?

Sure. Why do you need this? How do you work with this? What can you do with this? Is this simple approach really sufficient or useful? Why do you want to tinker with this at all?

Want to know more? Read reflections on debugging

참고URL : https://stackoverflow.com/questions/17804007/how-to-show-line-number-when-executing-bash-script

반응형