我工作的环境里有很多遗留的 shell 脚本魔法。命令行中经常使用的一个东西是 bash 函数,这些函数来自某个文件,包括某个文件,包括某个文件...包括在我的 .bash_profile 中。有没有办法获取这些函数的定义,甚至更好地找到它们定义的位置,而无需通过 5 层包含来追踪它们?
答案1
获取函数定义:
type -a function_name
答案2
假设您有一个名为 foo 的函数,下面的命令将获取该函数定义的位置,也就是说,它将获取定义该函数的文件的名称以及该文件中定义该函数的行号。
# Turn on extended shell debugging
shopt -s extdebug
# Dump the function's name, line number and fully qualified source file
declare -F foo
# Turn off extended shell debugging
shopt -u extdebug
就我而言,这些命令的输出是:
foo 32 /source/private/main/developer/cue.pub.sh
答案3
要查看函数的定义(而不是它的来源),请使用:
declare -f <functionname>
答案4
另一种方法,最近我发现更简单:
which <functionname>
(这也将显示它是别名还是脚本,但不会追踪别名的来源)