如何在Linux/Unix上找到bash shell函数源代码
时间:2020-01-09 10:39:11 来源:igfitidea点击:
如何找出已定义的名为foo()的bash函数的源代码。
如何找到定义bash函数的文件,以及如何从shell提示符本身查看foo()的源代码?
要找到函数定义,即从bash shell中获取foo()的源代码,请运行:
type -a function_name_here type -a foo
输出示例:
foo is a function foo () { local l=""; [[ $l == "" ]] && /usr/bin/lxc exec vm -- /root/bin/uploads on; /usr/bin/lxc exec vm -- /bin/bash; [[ $l == "" ]] || return 0; wait; /usr/bin/lxc exec vm -- /root/bin/uploads off; sudo -i /root/bin/master.replication -v; }
要列出所有函数名称,请执行:
$ declare -F $ declare -F | grep function_name $ declare -F | grep foo
输出示例:
declare -f __expand_tilde_by_ref declare -f __get_cword_at_cursor_by_ref declare -f __git_eread declare -f __git_ps1 declare -f __git_ps1_colorize_gitstring declare -f __git_ps1_show_upstream declare -f __grub_dir declare -f __grub_get_last_option declare -f __grub_get_options_from_help declare -f __grub_get_options_from_usage declare -f __grub_list_menuentries declare -f __grub_list_modules declare -f __grubcomp declare -f __ltrim_colon_completions declare -f __parse_options declare -f __reassemble_comp_words_by_ref declare -f _allowed_groups declare -f _allowed_users declare -f _available_interfaces declare -f _cd .... .. ... declare -f _uids declare -f _upvar declare -f _upvars declare -f _usb_ids declare -f _user_at_host declare -f _usergroup declare -f _userland declare -f _variables declare -f _xfunc declare -f _xinetd_services declare -f cbz_wp_admin declare -f command_not_found_handle declare -f del_all_mem_cache declare -f dequote declare -f quote declare -f quote_readline
要查看see quote()定义:
$ declare -f quote
输出示例:
quote () { local quoted=${1//\'/\'\\'\'}; printf "'%s'" "$quoted" }
如何找到定义了bash函数的文件?
语法如下:
$ shopt -s extdebug $ declare -F quote `quote 143 /usr/share/bash-completion/bash_completion` $ declare -F cbz_wp_admin `cbz_wp_admin 14 /home/Hyman/.bash_aliases`
quote()是在143行定义的/usr/share/bash-completion/bash_completion文件。
与第14行/home/Hyman/.bash_aliases中定义的cbz_wp_admin()相同。
您也可以按以下方式启动它:
$ bash --debugger $ declare -F function_name() $ declare -F cbz_wp_admin