假设我有 2 个脚本
测试1.sh
#!/bin/sh
. ./test2.sh
foo
测试2.sh
#!/bin/sh
foo(){
echo "bar"
}
如果我调用第一个脚本就可以了
$ ./test1.sh
bar
但是,如果我尝试foo
在那之后打电话,它将无法正常工作。
$ foo
bash: foo: command not found
当您执行时./test1.sh
,会产生一个子进程。当test1.sh
sources时test2.sh
,仅在foo()
定义时修改该子流程的上下文。一旦test1.sh
完成,子进程就会终止,并且您的交互式 shell 不知道foo()
.
如果你打电话source test2.sh
,你会得到你想要的结果。如果您希望能够在启动新终端时调用 foo,请将其定义放在 .bashrc 或 .profile 文件中。
如果我 source test1.sh 它会给出所需的结果。
$ . test1.sh
bar
$ foo
bar