我有这个:
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
将仅打印相对路径(即使您不再位于该目录中。)此外,如果路径有任何空格或不可打印的字符,这些字符将保留在输出中(因此“第三个字段”可能不正确......)