The technique is based on the declare -f command which allows you to print the definition of previously defined function:
$ sayHello() { echo "hello world";} $ declare -f sayHello sayHello () { echo "hello world" }
The following script sketches how to utilize this feature to replace an original function with a stub at run time:
#!/bin/bash doComplicatedThings() { echo "i am doing many complicated things" # ... } codeOfOriginalFunction=$(declare -f doComplicatedThings) # stub out "doComplicatedThings" function doComplicatedThings { :; } # executes stub (does nothing) doComplicatedThings # re-establish orignal function eval "${codeOfOriginalFunction}" # executes the original function doComplicatedThingsThe function doComplicatedThings is the production function which might have been loaded from an external script file via the source command. The definition of doComplicatedThings is then saved as a string into codeOfOriginalFunction.
The replacement function is just an empty stub. When executing the stubbed version of doComplicatedThings than as expected nothing happens. Calling eval restores the original function so that the second call of doComplicatedThings prints out the original message.
Keine Kommentare:
Kommentar veröffentlichen