나는 이것을 가지고있다:
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
상대 경로만 인쇄합니다(더 이상 해당 디렉토리에 있지 않더라도). 또한 경로가 출력에 남아 있는 공백이나 인쇄할 수 없는 문자가 있습니다(그래서 "세 번째 필드"가 올바르지 않을 수 있습니다...).