명령문 결과의 세 번째 항목을 구문 분석합니다.

명령문 결과의 세 번째 항목을 구문 분석합니다.

나는 이것을 가지고있다:

CD 31 /Users/alexamil/WebstormProjects/oresoftware/botch/botch-shell-overrides.sh

위 스타일 출력은 다음 명령으로 제공됩니다.

declare -F my_bash_func

결과에서 파일 이름을 어떻게 얻을 수 있나요? 그것은 다음과 같습니다:

file=$(declare -F my_bash_func | grab_3rd_entry)

나는 다음을 사용해야 한다:

shopt -s extdebug
declare -F my_bash_func
shopt -u extdebug

하지만 이는 MacOS에서는 작동하지 않습니다.

shopt -s extdebug
declare -pf my_bash_func
shopt -u extdebug

후자는 이상한 오류를 생성합니다.

명령문: my_bash_func: 찾을 수 없음

그러나 선언 -F를 사용하여 함수를 찾을 수 있으므로 해당 -pf옵션이 작동하지 않는 이유는 확실하지 않습니다.

답변1

다음을 위해 사용할 수 있습니다 awk:

file=$(declare -F my_bash_func | awk '{print $3}')

또는 bash 내장 함수를 사용하여 배열로 읽어옵니다.

func_info=( $(declare -F my_bash_func) )
file=${func_info[2]}
line_number=${func_info[1]}

그러나 declare -F my_bash_func출력은 파서 친화적이지 않습니다... 함수를 포함하는 파일이 상대 경로에서 비롯된 경우 출력은 extdebug상대 경로만 인쇄합니다(더 이상 해당 디렉토리에 있지 않더라도). 또한 경로가 출력에 남아 있는 공백이나 인쇄할 수 없는 문자가 있습니다(그래서 "세 번째 필드"가 올바르지 않을 수 있습니다...).

관련 정보