如何找到调用的函数。

如何找到调用的函数。

如何找到调用的函数。

[CODE]# bool iface_start(char *interface)
#
# iface_start is called from start.  It's expected to start the base
# interface (for example "eth0"), aliases (for example "eth0:1") and to start
# VLAN interfaces (for example eth0.0, eth0.1).  VLAN setup is accomplished by
# calling itself recursively.
iface_start() {
        local iface=${1} mod config_counter=-1 x warn=false config_worked=false
        local RC_INDENTATION=${RC_INDENTATION}        # so it will reset after function
        local -a config fallback fallback_route conf
        local ifvar=$( interface_variable ${iface} )

        # pre Start any modules with
        for mod in ${MODULES[@]}; do
                if [[ $( type -t ${mod}_pre_start ) == function ]]; then
                        ${mod}_pre_start ${iface} || { eend 1; return 1; }
                fi
        done

        # New style config - one variable fits all
        eval config=( \"\$\{config_${ifvar}\[@\]\}\" )
        eval fallback=( \"\$\{fallback_${ifvar}\[@\]\}\" )
        eval fallback_route=( \"\$\{fallback_route_${ifvar}\[@\]\}\" )

        # We must support old configs
        if [[ -z ${config} ]]; then
                interface_get_old_config ${iface} || return 1
        fi

        # Handle "noop" correctly
        if [[ ${config[0]} == "noop" ]]; then
                if interface_is_up ${iface} true ; then
                        einfo "Keeping current configuration for ${iface}"
                        eend 0
                        return 0
                fi

                # Remove noop from the config var
                config=( "${config[@]:1}" )
        fi

        # Provide a default of DHCP if no configuration is set
        if [[ -z ${config} ]]; then
                if [[ $( type -t dhcp_start ) == function ]]; then
                        config=( "dhcp" )
                        warn=true
                else
                        eerror "Cannot default to dhcp as there is no dhcp module loaded"
                        eerror "No configuration for ${iface}"
                        return 1
                fi
        fi

        einfo "Bringing up ${iface}"
        eindent
        for (( config_counter=0; config_counter<${#config[@]}; config_counter++ )); do
                # Handle null and noop correctly
                if [[ ${config[config_counter]} == "null" \
                || ${config[config_counter]} == "noop" ]]; then
                        eend 0
                        config_worked=true
                        continue
                fi

                if ${warn}; then
                        ewarn "Configuration not set for ${iface} - assuming dhcp"
                        warn=false
                fi

                # We convert it to an array - this has the added
                # bonus of trimming spaces!
                conf=( ${config[config_counter]} )
                einfo "${conf[0]}"

                # Do we have a function for our config?               
                if [[ $( type -t ${conf[0]}_start ) == function ]]; then
                        # Check that the module is valid
                        x=false
                        for mod in ${MODULES[@]}; do                       
                                if [[ $( ${mod}_provides ) == ${conf[0]} ]]; then
                                        x=true
                                        break
                                fi
                        done

                        if ! ${x}; then
                                [[ $( type -t ${conf[0]}_check_installed == function ) ]] && ${conf[0]}_check_installed true
                                eerror "No loaded modules provide \"${conf[0]}\" (${conf[0]}_start)"
                        else
                                eindent

                                     ${conf[0]}_start ${iface} ; x=$?
                                                         #${conf[0]}_start的值是dhcp_start 如何找到调用的dhcp_start()函数的定义?
[/COLOR]

                                eoutdent
                                [[ ${x} == 0 ]] && config_worked=true && continue
                        fi
                # We need to test to see if it's an IP address or a function
                # We do this by testing if the 1st character is a digit
                elif [[ ${conf[0]:0:1} == [[:digit:]] || ${conf[0]} == *:* ]]; then
                        x=0
#                        if [[ $(type -t address_exists ) == function ]]; then
#                                if address_exists ${iface} ${conf[0]} ; then
#                                        eerror "${conf[0]%%/*} already taken on ${iface}"
#                                        x=1
#                                fi
#                        fi
                        [[ ${x} == 0 ]] && interface_add_address ${iface} ${conf[@]} ; x=$?
                        eend ${x} && config_worked=true && continue
                else
                        eerror "No loaded modules provide \"${conf[0]}\" (${conf[0]}_start)"
                fi

                if [[ -n ${fallback[config_counter]} ]]; then
                        einfo "Trying fallback configuration"
                        config[config_counter]=${fallback[config_counter]}
                        fallback[config_counter]=''

                        # Do we have a fallback route?
                        if [[ -n ${fallback_route[config_counter]} ]]; then
                                eval "routes_${ifvar}=( "\"\$\{fallback_route\[${config_counter}\]\[@\]\}\"" )"
                                fallback_route[config_counter]=''
                        fi

                        (( config_counter-- )) # since the loop will increment it
                        continue
                fi
        done
        eoutdent

        # We return failure if no configuration parameters worked
        ${config_worked} || return 1

        # Start any modules with _post_start
        for mod in ${MODULES[@]}; do
                if [[ function == $( type -t ${mod}_post_start ) ]]; then
                        ${mod}_post_start ${iface} || return 1
                fi
        done

        return 0
}[/CODE]

${conf[0]}_start ${iface} ; x=$?
#${conf[0]}_start的值是dhcp_start  如何找到调用的dhcp_start()函数的定义?
[/COLOR]      
grep?      
grep 了半天,不好使?

有没有简单的。
复制内容到剪贴板
代码:
apple@localhost /etc $ grep -R hello /
Binary file /bin/sh matches
grep: /bin/su: 权限不够
Binary file /bin/bash matches
Binary file /bin/grep matches
grep: /bin/ping: 权限不够
Binary file /bin/egrep matches
Binary file /bin/fgrep matches
grep: /bin/mount: 权限不够
grep: /bin/ping6: 权限不够
Binary file /bin/rbash matches
grep: /bin/passwd: 权限不够
grep: /bin/umount: 权限不够
grep: /dev/vcsa7: 权限不够
grep: /dev/vcs7: 权限不够
grep: /dev/vcsa6: 权限不够
grep: /dev/vcs6: 权限不够
grep: /dev/vcsa5: 权限不够
这些怎么不让显示?      
看 code      
[QUOTE]localhost / # find /home/apple/ -name a -ok echo {}\\\\;
find: missing argument to `-ok'
localhost / #[/QUOTE]

怎么老是不行?      
-exec command ;
              Execute  command;  true if 0 status is returned.  All following arguments to find are taken to be arguments to the
              command until an argument consisting of `;' is encountered.  The string `{}' is replaced by the current file  name
              being  processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as
              in some versions of find.  Both of these constructions might need to be escaped (with a `\') or quoted to  protect
              them from expansion by the shell.  The command is executed in the starting directory.      
少了个空格      
很多启动脚本都是分散的
他们之间的联系是靠 source 命令来引用
要找到一个函数很麻烦      
不至于把 bs 给难住吧. good luck       
复制内容到剪贴板
代码:
localhost apple # find / -mount -type f -user root  -exec grep dhcp_start {} ";"  -exec echo "--->"{} ";"
                if [[ $( type -t dhcp_start ) == function ]]; then
--->/etc/init.d/net.lo
                if [[ $( type -t dhcp_start ) == function ]]; then
--->/etc/init.d/._cfg0000_net.lo
localhost apple # find / -mount -name dhcp_start
localhost apple # vi /etc/init.d/net.eth0
localhost apple # /etc/init.d/net.eth0 restart
* Caching service dependencies ...                                                                                                      [ ok ] * Stopping apache2 ...                                                                                                                  [ ok ] * Stopping ntpd ...                                                                                                                     [ ok ] * Stopping snort ...                                                                                                                    [ ok ] * Stopping squid ...                                                                                                                    [ ok ] * Stopping sshd ...                                                                                                                     [ ok ] * Stopping xsp ...                                                                                                                      [ ok ] * Stopping eth0
*   Bringing down eth0
*     Stopping dhclient on eth0 ...                                                                                                     [ ok ] *     Shutting down eth0 ...                                                                                                            [ ok ] * Starting eth0
*   Bringing up eth0
*     Configuration not set for eth0 - assuming dhcp
*     dhcp
dhcp_start
*       Running dhclient ...                                                                                                            [ ok ] *       eth0 received address 10.1.3.3
* Starting apache2 ...                                                                                                                  [ ok ] * Setting clock via the NTP client 'ntpdate' ...                                                                                        [ ok ] * Starting ntpd ...                                                                                                                     [ ok ] * Starting snort ...                                                                                                                    [ ok ] * Starting squid ...                                                                                                                    [ ok ] * Starting sshd ...                                                                                                                     [ ok ] * Starting xsp ...                                                                                                                      [ ok ]localhost apple #
一个都没有找到