说我有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
答案 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