我有以下shell脚本。
脚本1

#!/bin/bash
foo() {
echo "foo from Script1"
}
foo1() {
echo "foo1 from Script1"
}
source script2
foo
fool
脚本2
#!/bin/bash
foo() {
echo "foo from Script2"
}
foo1() {
echo "foo1 from Script2"
}
我得到以下输出:

预期输出为

我知道源命令在这里玩了。是否有任何方法可以将控件带回Script1或任何其他替代方法来实现此目的?

最佳答案

如果您希望script2的来源仅影响foo的执行,则一种可能是将其放在子 shell 中:

( . script2 ; foo ; )
foo1

输出:
foo from Script2
foo1 from Script1

10-06 05:49