초보자 질문입니다. 누군가가 도움을 줄 수 있기를 바랍니다.
오류 검사 기능이 내장된 bash 스크립트에 함수를 작성하고 있습니다. 줄 번호가 포함된 오류 메시지를 반환하고 싶습니다.
Error, parameter not provided, please check line 57
명령 을 찾았 caller
지만 이것이 반환됩니다.
57 filename.sh
숫자만 추출하기 위해 정규식을 사용하는 방법을 생각해 보았지만 이는 과도한 것 같고 호출자 명령 자체에는 줄 번호만 반환하는 옵션이 없는 것 같습니다.
bash에서 내가 원하는 것만 반환하는 방법이 있나요?
호출이 라인 50, 500 또는 5000에 있을 수 있으므로 왼쪽 x 문자에서 가져오는 것은 작동하지 않습니다.
답변1
caller
in 지시문은 bash
공백으로 구분된 두 개의 값, 즉 호출자의 줄 번호와 파일 이름을 반환합니다. 예를 들어,
57 filename.sh
여기서 해야 할 일은 첫 번째 매개변수를 선택하는 것뿐입니다. awk
이 작업은 매우 쉽게 수행할 수 있습니다.
caller | awk '{ print $1 }'
결과
57
답변2
텍스트를 보고 help caller
텍스트의 첫 번째 단어인 줄 번호를 반환합니다.
bash read 명령을 사용하여 단어로 분할할 수 있습니다.
read lineno rest <<< "$(caller)"
정규식을 사용하면 그렇게 번거롭지 않습니다.
[[ $(caller) =~ ^([[:digit:]]+) ]] && lineno=${BASH_REMATCH[1]}
#!/bin/bash
# line 2
a() { b; } # line 3
b() { c; } # line 4
c() { # line 5
caller # line 6
out=$(caller); echo "$out" # line 7
i=0 # line 8
while true; do # line 9
c=$(caller $i) # line 10
[[ -z "$c" ]] && break # line 11
printf '%d = %s\n' $((i++)) "$c" # line 12
done # line 13
} # line 14
a # line 15
산출
4 caller.sh
4 caller.sh
0 = 4 b caller.sh
1 = 3 a caller.sh
2 = 15 main caller.sh