如果我在文件中定义一个函数,请说test1.sh:
#!/bin/bash
foo() {
echo "foo"
}
Run Code Online (Sandbox Code Playgroud)
在一秒钟内,test2.sh,我尝试重新定义foo:
#!/bin/bash
source /path/to/test1.sh
...
foo() {
...
echo "bar"
}
foo
Run Code Online (Sandbox Code Playgroud)
有没有办法改变test2.sh来产生:
foo
bar
Run Code Online (Sandbox Code Playgroud)
我知道可以使用 Bash 内置command函数来做,但我想知道是否可以扩展用户功能?
我不知道有什么好的方法(但我很乐意被证明是错误的)。
这是一个丑陋的方法:
# test2.sh
# ..
eval 'foo() {
'"$(declare -f foo | tail -n+2)"'
echo bar
}'
Run Code Online (Sandbox Code Playgroud)
我不确定是否有必要做这样的事情。您可以在函数内部使用函数,那么当您可以在新创建的函数中调用原始源函数时,为什么要重用该名称,如下所示:
AirBoxOmega:stack d$ cat source.file
#!/usr/local/bin/bash
foo() {
echo "foo"
}
AirBoxOmega:stack d$ cat subfoo.sh
#!/usr/local/bin/bash
source /Users/d/stack/source.file
sub_foo() {
foo
echo "bar"
}
sub_foo
AirBoxOmega:stack d$ ./subfoo.sh
foo
bar
Run Code Online (Sandbox Code Playgroud)
当然,如果您真的想修改,您可以在新函数中获取函数,调用它,然后执行其他操作,如下所示:
AirBoxOmega:stack d$ cat source.file
#!/usr/local/bin/bash
foo() {
echo "foo"
}
AirBoxOmega:stack d$ cat modify.sh
#!/usr/local/bin/bash
foo() {
source /Users/d/stack/source.file
foo
echo "bar"
}
foo
AirBoxOmega:stack d$ ./modify.sh
foo
bar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1648 次 |
| 最近记录: |