Bash,调用源自脚本的函数?

时间:2012-07-04 14:10:40

标签: bash function

说我有2个脚本

test1.sh

#!/bin/sh
. ./test2.sh
foo

test2.sh

#!/bin/sh
foo(){
  echo "bar"
}

如果我打电话给第一个脚本就可以了

$ ./test1.sh
bar

但如果我在此之后尝试拨打foo则无效。

$ foo
bash: foo: command not found

3 个答案:

答案 0 :(得分:10)

执行./test1.sh时,会生成一个子流程。当test1.sh来源test2.sh时,只有在定义foo()时才会修改该子流程的上下文。只要test1.sh完成,子进程就会终止,而您的交互式shell不知道foo()

答案 1 :(得分:3)

如果您致电source test2.sh,您将获得所需的结果。 如果您希望每次启动新终端时都能调用foo,请将其定义放在.bashrc或.profile文件中。

答案 2 :(得分:0)

如果我输出test1.sh,它会得到所需的结果。

$ . test1.sh
bar

$ foo
bar